본문 바로가기
데이터/Spark

RDD vs. Dataframe (In Python)

by Sunyoung95 2024. 6. 16.

출처 : A comparison between RDD, DataFrame and Dataset in Spark from a developer’s point of view

 

RDD 란?

  • Resilient : RDD lineage 그래프를 통한 fault-tolerant가 빠졌거나, node의 실피로 인한 손상된 파티션을 다시 실행시킨다
  • Distributed : 클러스터의 여러 노드에 데이터가 분산되어 저장
  • Dataset : 원천 데이터값 혹은 값의 값들로 이루어진 파티션된 collection 데이터 
                    (튜플 혹은 다른 레코드로써 사용될 수 있는 데이터 객체들)

필요한 상황

  • 고수준 API에서 제공하지 않는 기능이 필요한 경우(JAVA, Scala에만 해당, Python은 성능손실이 크다)
    -> 클러스터의 물리적 데이터 배치를 아주 세밀하게 제어해야 함
    -> map, filter, reduce와 같은 하위수준의 변환의 경우
  • RDD를 사용해 개발된 기존 코드를 유지해야하는 경우
  • 물리적으로 분산된 데이터 (자체적으로 구성한 데이터 파티셔닝)에 세부적인 제어가 필요할 경우 

피해야하는 상황

  • 필수적인 상황이 아닐경우 RDD 수동생성 지양
  •  Scala
    • 원형 객체를 다룰 때 큰 성능 손실이 발생
  • Python
    • RDD를 파이썬으로 실행하는 것은 파이썬으로 만들어진 사용자 정의함수(UDF)를 사용해 로우마다 적용하는 것과 동일
    • 직렬화과정을 거친 데이터를 파이썬 프로세스에 전달하고, 파이썬 처리가 끝나면 다시 직렬화하여 자바 가상머신에 반환, 파이썬을 이용한 RDD는 높은 오버헤드가 발생
    • UDF 선언 시 인터프리터와 JVM사이 커뮤니케이션으로 속도가 저하됨(python의 경우 scala의 2배), 반드시 built in 함수만 쓸 것.

특징

특징 설명
Instance 각 record가 로우라는 개념이 아닌 객체 
In-Memory RDD속의 데이터는 가능한 많이, 오래 메모리에 저장되어 있다.
불가변성 (읽기전용) 한번 생성되고나면 변하지 않는다. transformation 연산을 통해 새로운 RDD로써 만들 수 있다.
Lazy evaluated RDD속의 데이터는 action으로 분류되는 연산자가 실행되기 전까지는 실제 수행되거나 transform되지 않는다.
cacheable data를 캐싱할 수 있다.
Paralled (병행처리) 병행처리가 가능하다
Typed (타입존재) RDD 레코드는 타입을 가지고 있다. (RDD[long], RDD[int,String] 등등)
Partitioned  레코드들은 논리적인 파티션으로 분할되어있고 클러스터의 여러 노드에 분산저장되어 있다.

 

 

DataFrame 이란?

  • SparkSession을 통해 만들어지는 데이터 타입.
  • RDB의 테이블과 유사하게 Named Column으로 구성된 분산 데이터 모음 

필요한 상황

  • 다양한 데이터소스에 접근하여 write / read를 활용한 ETL 작업
  • filtering, aggregation, join 등 SQL 테이블과 유사한 작업이 필요한 경우  

피해야하는 상황

  • 사용자지정함수(UDF)를 선언하여 사용할 경우 속도저하의 원인이 될 수 있다.

특징

특징 설명
Row 각 record가 로우라는 개념
Lazy evaluated RDD속의 데이터는 action으로 분류되는 연산자가 실행되기 전까지는 실제 수행되거나 transform되지 않는다. (실행 전에는 계산/기능에 대한 계보를 저장만 함.)
SQL table과 같은 형식으로 구성되어있기 때문에 SparkSQL을 통해 쿼리를 사용할 수 있다.
Table RDB처럼 테이블을 가질 수 있으며, 테이블에 대한 연산이 가능
Catalyst Optimizer Catalyst 최적화 프로그램을 통한 내장 최적화는 쿼리의 효율적인 실행을 보장
Schema DataFrame에는 고유한 스키마가 있으므로 구조화된 데이터와 반 구조화된 데이터처리에 이상적
BI tool 호환성 Tableau 및 Power BI와 같은 BI도구와 호환되어 데이터 시각화에 용이 

참고

'데이터 > Spark' 카테고리의 다른 글

Spark 병렬처리 성능 테스트 사례  (0) 2024.07.14
Spark Partition 최적화  (0) 2024.06.23
Spark Cluster 구조 및 작동원리  (0) 2024.06.09

댓글