PySpark의 RDD(Resilient Distributed Dataset)

PySpark 입문

Benjamin Schmidt

Data Engineer

PySpark에서의 병렬화란?

  • 클러스터의 여러 노드에 데이터와 연산을 자동 병렬화
  • 대규모 데이터셋의 분산 처리
  • 워커 노드가 병렬 처리 후 최종 단계에서 결합
  • 대용량일수록 더 빠른 처리(GB~TB 단위)

Parallelization

PySpark 입문

RDD 이해하기

RDD(Resilient Distributed Dataset):

  • 노드 장애 시 자동 복구되는 분산 데이터 컬렉션
  • 대규모 데이터에 적합
  • 불변이며 map(), filter()로 변환, collect() 같은 액션으로 결과 조회, paralelize()로 RDD 생성 가능
PySpark 입문

RDD 생성하기

# Initialize a Spark session
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("RDDExample").getOrCreate()

# Create a DataFrame from a csv census_df = spark.read.csv("/census.csv")
# Convert DataFrame to RDD census_rdd = census_df.rdd
# Show the RDD's contents using collect() census_rdd.collect()
PySpark 입문

collect 보여주기

# Collect the entire DataFrame into a local Python list of Row objects
data_collected = df.collect()

# Print the collected data
for row in data_collected:
    print(row)
```    
PySpark 입문

RDD vs DataFrame

DataFrame

  • 고수준: 사용성 최적화
  • SQL 유사 연산: SQL처럼 질의, 적은 코드로 복잡 연산
  • 스키마: 컬럼과 타입 보유(테이블 유사)

RDD

  • 저수준: 유연하지만 복잡 작업에 코드 더 필요
  • 타입 보장: 타입은 보존하나 DataFrame만큼 최적화는 아님
  • 스키마 없음: 구조화 데이터 작업에 불리
  • 대규모 확장
  • 분석에는 장황하고 비효율적
PySpark 입문

유용한 함수와 메서드

  • map(): 함수(예: 람다)를 RDD 전반에 적용: rdd.map(map_function)
  • collect(): 클러스터 전역의 데이터를 수집: rdd.collect()
PySpark 입문

Vamos praticar!

PySpark 입문

Preparing Video For Download...