Spark 시작!
(사실 스파크는 학부때 쪼꼼 배운적이 있다. 그래서 이해가 조금 수월하지않을까? 하는 기대를 가지고 있다 헤헷)
처음 시작은 Nutch라는 오픈소스 검색엔진의 하부 프로젝트였다.
크게 두 개의 서브 시스템으로 구현이 되었는데,
그러나 MapReduce 프로그래밍의 문제점이 있다.
이러한 문제점들로 인해 MapReduce로 구현된 SQL 언어들이 다시 각광받게 되었다.
하둡은 Data Warehouse에 해당하는데, Work Flow 관리로는 Airflow가 대세인 추세라고 한다.
하둡의 뒤를 잇는 2세대 빅데이터 기술로, 정확히는 하둡 2.0을 기본으로 이 위에서 어플리케이션 형태로 돌아간다 생각하면 된다.
MapReduce의 단점을 대폭적으로 개선했으며, Pandas와 유사하다.
Spark는 기본적으로 메모리 기반
메모리가 부족해지면 디스크를 사용하는 방식이며, MapReduce는 디스크 기반이다.
MapReduce는 하둡에서만 동작했지만,
Spark는 다른 분산 컴퓨팅 환경 지원
MapReduce는 key와 value 기반 프로그래밍
Spark는 판다스와 개념적으로 흡사하다.
Spark는 다양한 방식의 컴퓨팅을 지원
배치 프로그래밍, 스트리밍 프로그래밍, SQL, 머신러닝, 그래프 분석
보통 Scala, Java, Python 중 하나를 사용한다.
Spark 프로그램의 시작은 SparkSession을 만드는 것에서 시작한다.
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark create RDD example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
sc = spark.sparkContext
변경이 불가능한 분산 저장된 데이터
다수의 파티션으로 구성되고 스파크 클러스터내 서버들에 나눠서 저장된다.
map, filter, flatMap 등등 로우레벨의 함수형 변환을 지원한다.
일반 파이썬 데이터는 parallelize
함수로 RDD로 변환해준다.
rdd = sc.parallelize(list)
...
print(rdd.collect())
데이터프레임도 변경이 불가한 분산 저장된 데이터
RDD와는 다르게 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장한다.
판다스의 데이터프레임과 거의 흡사하다고 볼 수 있다.
Scala, Java, R, Python과 같은 언어에서 지원한다.
생성 방법
RDD를 변환해서 생성하려면, RDD의 toDF
함수를 사용하면 된다.
SQL 쿼리를 기반으로 생성하려면,
df = spark.read.format("jdbc") \
.option("url", "jdvc:postgresql://hostname:5432/databasename") \
.option("dbtable", "tablename") \ # tablename 대신 SELECT문도 사용가능
.option("user", "username") \
.option("password", "password") \
.option("driver", "org.postgresql.Driver"0 \
.load()
df.printSchema()
createDataFrame
을 사용한다.