RDD vs DataFrame vs Dataset

노라에몽·2025년 7월 7일

Spark

목록 보기
1/4

Apache Spark는 분산 데이터 처리를 위한 세 가지 기본 추상화인 RDD, Dataframe, Dataset을 제공합니다.

RDD (Resilient Distributed Dataset)

Spark에서의 가장 기본적인 저수준 데이터의 추상화 레이어

  • 불변성(Immutable) : 한번 값이 정해지면 변경되지 않기 때문에 데이터 처리에 있어 단순하게 처리 (scala의 val 타입)

  • 수동의 최적화 필요

  • 스키마가 없는 비구조화된 데이터 처리에 적합

  • 모든 Spark 지원 언어(Java, Scala, Python)에서 사용 가능

    text_data = sc.parallelize([
       "Hello World",
       "Apache Spark",
       "Big Data",
       "Python Programming",
       "Spark RDD"
    ])
    
    	# 'Spark'가 포함된 문자열만 필터링
    spark_texts = text_data.filter(lambda x: "Spark" in x)

Dataframe

RDD 위의 고수준 API, 데이터를 테이블 형태로 나타낼 수 있음

  • 데이터를 칼럼으로 구조화하여 테이블과 유사한 형태 제공

  • Catalyst Optimizer 통한 자동 쿼리 최적화

  • SQL 사용 가능

  • 런타임에만 타입을 체크, 컴파일 시점에는 타입 안정성 제공 불가

    # 숫자 데이터로 DataFrame 생성
    numbers_data = [(i,) for i in range(1, 11)]
    numbers_df = spark.createDataFrame(numbers_data, ["number"])
    
     # 짝수만 필터링
    even_numbers_df = numbers_df.filter(col("number") % 2 == 0)

Dataset

Dataframe의 장점과 RDD의 장점을 결합한 최신 API

  • DataFrame의 최적화 기능 + RDD의 타입 안정성 제공
  • 컴파일 시점 타입 체크 제공
  • Dataframe에 비해 성능 오버헤드가 있으며 Python에서는 사용 불가
  • 타입 안정성이 중요할 때 사용할 수 있음
profile
대나무 헬리콥터

0개의 댓글