Apache Spark는 분산 데이터 처리를 위한 세 가지 기본 추상화인 RDD, Dataframe, 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)
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)
Dataframe의 장점과 RDD의 장점을 결합한 최신 API