spark 데이터 구조
RDD, 데이터프레임, 데이터셋
RDD는 가장 로우 레벨
spark 세션
spark 프로그램의 시작은 spark 세션을 만드는 것
spark 세션을 통해 spark이 제공해주는 다양한 기능을 사용
spark 컨텍스트, hive 컨텍스트, SQL 컨텍스트
spark 2.0 전에는 기능에 따라 다른 컨텍스트를 생성해야했음
명령을 내리려면 엔트리 포인트가 필요한데 spark세션이 이 엔트리포인트라고 생각하면 됨
spark 데이터 구조
크게 3가지 자료구조가 존재
RDD(Resilient Distribute Dataset)
로우레벨 데이터로 클러스터내의 서버에 분산된 데이터를 지칭
레코드별로 존재하며 구조화된 데이터나 비구조화된 데이터 모두 지원
Dataframe과 Dataset
RDD 위에 만들어지는 하이레벨 데이터로 RDD와는 달리 필드 정보를 갖고 있음(테이블)
Dataset은 Dataframe과는 달리 타입 정보가 존재하며 컴파일 언어에서 사용 가능
PySpark에서는 Dataframe을 사용함
SparkSQL을 사용하는 것이 더 일반적
spark 데이터 구조 - RDD
변경이 불가능한 분산 저장된 데이터
RDD는 다수의 파티션으로 구성되고 spark 클러스터내 서버들에 나눠 저장됨
로우레벨의 함수형 변환 지원(map,filter,flatMap 등등)
RDD가 아닌 일반 파이썬 데이터는 parallelize 함수로 RDD로 변환
spark 데이터 구조 - 데이터 프레임
RDD처럼 데이터 프레임도 변경이 불가한 분산 저장된 데이터
RDD와는 다르게 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장
판다스 데이터 프레임과 거의 흡사
데이터 프레임은 다양한 데이터 소스 지원: 파일,Hive,외부 데이터베이스, RDD 등등
스칼라, 자바, R, 파이썬과 같은 언어에서 지원
spark 데이터구조 - 데이터셋
spark 1.6부터 추가된 새로운 데이터 타입
RDD와 spark SQL의 최적화 엔진 두가지 장점을 취함
데이터셋은 타입이 있는 컴파일 언어에서만 사용 가능
데이터 셋은 자바와 스칼라에서만 지원되며 파이썬에서는 사용불가
이번 강좌에서는 사용하지 못함
Spark 데이터구조 - 데이터 프레임 생성방법
RDD를 변환해서 생성 : RDD의 toDF 함수 사용
SQL 쿼리를 기반으로 생성: 아래 예 참조
tablename 자리에 SELECT 문도 사용 가능
외부데이터를 로딩하여 생성
createDataFrame