Spark & Hadoop/Spark

[Spark] Spark 데이터 구조 (RDD, DataFrame, Dataset)

YSY^ 2023. 9. 29. 22:51

Spark 데이터 구조 

  • RDD, DataFrame, Dataset (Immutable Distributed Data)
    • RDD가 가장 밑바닥에 있고, 그 위해 DataFrame과  Dataset가 있음
    • RDD는 할 수 있는 것은 많지만, 프로그래밍 생산성이 떨어짐.
    • python을 쓴다면 Dataframe, java/scaler로 한다면 Dataset을 씀
    • 2016년에 DataFrame과 Dataset은 하나의 API로 통합됨
    • 모두 파티션으로 나뉘어 Spark에서 처리됨

Spark 데이터 구조

  • DataFrame Code나 Sparksql을 효율적인 자바 바이트 코드(Java bytecode) 로 만들어주는 과정
  1. Cody Analysis : 코드 분석하여 어떤 테이블과, 컬럼을 쓰는지 결정하고, 사용자가 없는 테이블과 컬럼을 쓰면 에러를 냄
  2. Logical Optimization : 코드를 실행할 수 있는 여러 방안을 만들어내고 Catalyst Optimizer라고 하는 비용을 계산하는 과정을 거침. Standard Sql 최적화 방식을 사용
  3. Physical Planning : 비용이 가장 싼 방식을 골라, RDD Operation 룰로 코드를 만듬
  4. Code Generation : RDD Operation 코드를 자바 바이트 코드 로 바꿈

CF) 자바 바이트 코드(Java bytecode)

  • 자바 바이트 코드(Java bytecode)란 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미함
  • 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고도 불림.
  • 자바 바이트 코드는 자바 가상 머신(JVM)만 설치되어 있으면, 어떤 운영체제에서라도 실행될 수 있음.

RDD (Resilient Distributed Dataset)

  • 로우레벨 데이터로 클러스터내의 서버에 분산된 데이터를 지칭
  • 레코드별로 존재하지만 스키마가 존재하지 않음
  • 구조화된 데이터나 비구조화된 데이터 모두 지원
  • 변경이 불가능한 분산 저장된 데이터
    • RDD는 다수의 파티션으로 구성
    • 로우레벨의 함수형 변환 지원 (map, filter, flatMap 등등)
  • 일반 파이썬 데이터는 parallelize 함수로 RDD로 변환
    • 반대는 collect로 파이썬 데이터로 변환가능
# Rdd 코드 예시
py_list = [
 (1, 2, 3, 'a b c'),
 (4, 5, 6, 'd e f'),
 (7, 8, 9, 'g h i')
]
rdd = sc.parallelize(py_list)
…
print(rdd.collect())

DataFrame과 Dataset

  • 변경이 불가한 분산 저장된 데이터 
  • RDD위에 만들어지는 RDD와는 달리 필드 정보를 갖고 있음 (테이블)
    • 즉, RDD와는 다르게 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장
  • Dataset은 타입 정보가 존재하며 컴파일 언어에서 사용가능
    • 컴파일 언어: Scala/Java에서 사용가능
  • PySpark에서는 DataFrame을 사용
  • 판다스의 데이터 프레임 혹은 관계형 데이터베이스의 테이블과 거의 흡사
  • 다양한 데이터소스 지원: HDFS, Hive, 외부 데이터베이스, RDD 등등
  • 스칼라, 자바, 파이썬과 같은 언어에서 지원

정리

  RDD DataFrame Dataset
정의 Distributed collection of records
(structured & unstructured)
RDD organized into named column Extention of dataframe
도입된 버전 1.0 1.3 1.6
컴파일타임 타입 X X O
사용하기쉬운 API X O O
SparkSQL 기반 X O O
Catalyst Optimizer X O O

위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 듣고 정리한 내용입니다

 
728x90
반응형