터칭 데이터
Spark 데이터 구조: RDD, DataFrame, Dataset 본문
Contents
1. Spark 데이터 처리
2. Spark 데이터 구조: RDD, DataFrame, Dataset
3. 프로그램 구조
4. 개발/실습 환경 소개
5. Spark DataFrame 실습
Spark 데이터 구조: RDD, DataFrame, Dataset
Spark 프로그래밍: 기본 데이터 포맷들에 대해 알아보자
Spark 데이터 구조
RDD, DataFrame, Dataset (Immutable Distributed Data)
2016년에 DataFrame과 Dataset은 하나의 API로 통합됨
모두 파티션으로 나뉘어 Spark에서 처리됨
RDD는 상대적으로 로우 레벨
DataFrame과 Dataset은 상대적으로 하이 레벨
RDD가 가장 밑, DataFrame과 Dataset은 그 위에 올라 간다고 생각하시면 됩니다.
파이썬 코딩은 DataFrame, Scala나 JAVA 코딩은 Dataset이 일반적이고 구조화된 데이터를 갖고 데이터 관계된 Operation은 SparkSQL이 가장 일반적입니다.
Spark 데이터 구조
RDD (Resilient Distributed Dataset)
로우레벨 데이터로 클러스터내의 서버에 분산된 데이터를 지칭
레코드별로 존재하지만 스키마가 존재하지 않음
- 구조화된 데이터나 비구조화된 데이터 모두 지원
DataFrame과 Dataset
RDD위에 만들어지는 RDD와는 달리 필드 정보를 갖고 있음 (테이블)
Dataset은 타입 정보가 존재하며 컴파일 언어에서 사용가능
- 컴파일 언어: Scala/Java에서 사용가능
PySpark에서는 DataFrame을 사용
Spark 데이터 구조
Spark SQL Engine은 우리가 작성한 DataFrame이나 Spark SQL 코드를 최적화해 최종적으로 RDD Operation으로 만들고 그 뒤에 JAVA byte 코드로 만듭니다.
4가지 스텝을 거칩니다.
1. Code Analysis: 코드를 분석해 어떤 테이블과 컬럼이 사용되는지 들을 결정하고 없는 테이블이나 컬럼을 사용하면 에러를 냅니다.
2. Logical Optimization(Catalyst Optimizer): 코드를 실행할 수 있는 여러가지 방안을 만들어냅니다. Catalyst Optimizer로 각 방안들의 비용을 파악 및 계산합니다.
3. Physical Planning: 비용이 가장 싼 것을 골라 RDD Operation들로 실제 코드를 만듭니다. 윗단에 있던 녹색 박스의 Spark SQL, DataFrame, Dataset 오퍼레이션 코드를 3번 단계인 Physical Planning이 끝난 뒤에는 RDD Operation으로 코드가 바뀝니다.
4. RDD Operation (Project Tungsten): 코드를 JAVA byte 코드로 바꿉니다.
요약하면 우리가 작성한 Spark SQL이나 DataFrame 코드를 효율적인 JAVA byte 코드로 만드는 것을 Spark SQL Engine이고 RDD를 사용하면 이를 사용할 수 없습니다.
Spark 데이터 구조 - RDD
변경이 불가능한 분산 저장된 데이터
RDD는 다수의 파티션으로 구성
로우레벨의 함수형 변환 지원 (map, filter, flatMap 등등)
일반 파이썬 데이터는 parallelize 함수로 RDD로 변환
반대는 collect로 파이썬 데이터로 변환가능
parallelize는 Spark context의 함수입니다. Spark context는 Spark Session아래에 있는 property입니다.
parallelize를 사용하면 드라이버에 존재하는 파이썬 자료구조를 Spark Cluster의 RDD로 올릴 수 있습니다. 올린 RDD는 그 안에서 DataFrame으로 바꿀 수 있습니다. 단 컬럼이 존재하므로 스키마(포맷)를 정의해줘야 합니다.
RDD에서 계산을 끝내고 드라이버 프로그램(Python 메인 프로그램)으로 가져오고 싶다면 그 때는 RDD의 collect 함수를 사용하면 됩니다. collect 메서드는 파이썬 메인에서 사용할 수 있는 자료 구조로 다운로드 받는 함수이기 때문에 데이터 크기가 크다면 메모리가 부족하여 사용할 수 없습니다. 그럴 필요도 없고요. 크기가 작은 최종 결과물을 받아 파이썬에서 사용할 때만 collect 함수를 활용합니다.
Spark 데이터 구조 - 데이터 프레임
변경이 불가한 분산 저장된 데이터
RDD와는 다르게 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장
판다스의 데이터 프레임 혹은 관계형 데이터베이스의 테이블과 거의 흡사
다양한 데이터소스 지원: HDFS, Hive, 외부 데이터베이스, RDD 등등
스칼라, 자바, 파이썬과 같은 언어에서 지원
이 강의에서는 DataFrame을 사용할 예정
'하둡과 Spark' 카테고리의 다른 글
개발환경소개 Colab 설정과 코딩 데모 (0) | 2024.01.16 |
---|---|
Spark 프로그램 구조 (0) | 2024.01.16 |
Spark 데이터 처리 (0) | 2024.01.16 |
Intro (0) | 2024.01.16 |
요약 (0) | 2024.01.15 |