Spark SQL과 데이터프레임¶
개요¶
RDD가 노드에 나눠진 요소들의 모음이었다면, 구조화된 데이터를 다룰 때는 그저 "요소"가 아니라 "행과 열"로 생각하는 게 자연스러워요. Spark SQL은 구조화된 데이터 처리를 위한 Spark 모듈이에요. 이 모듈이 제공하는 DataFrame과 Dataset은 RDD API와 달리 데이터의 구조(스키마)와 계산의 구조를 Spark에 더 많이 알려줘서, Spark가 그 정보로 추가 최적화를 수행할 수 있어요. 이 페이지는 공식 문서 기준으로 DataFrame·Dataset과 Spark SQL의 관계를 풀어요.
핵심 개념¶
DataFrame과 Dataset¶
공식 문서에 따르면 Dataset은 분산 데이터 컬렉션이에요. Spark 1.6에서 추가된 인터페이스로, RDD의 장점(강한 타입, 강력한 람다 함수)과 Spark SQL의 최적화 실행 엔진의 장점을 모두 가져요. Dataset은 JVM 객체에서 만들고 map, flatMap, filter 같은 함수형 변환으로 다뤄요.
DataFrame은 이름 있는 컬럼으로 구성된 Dataset이에요. 관계형 DB의 테이블이나 R/Python의 데이터프레임과 개념적으로 같지만, 내부에서 더 풍부한 최적화가 이뤄져요. Scala·Java에서는 DataFrame이 Dataset[Row]의 타입 별칭이에요. Python은 동적 특성 덕에 row.columnName처럼 이름으로 필드에 접근할 수 있고, Dataset 전용 API는 지원하지 않아요.
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("example").getOrCreate()
df = spark.read.csv("s3://.../events.csv", header=True)
df.filter(df["type"] == "page_view").groupBy("date").count().show()
데이터 소스¶
DataFrame은 다양한 소스에서 만들 수 있어요. 구조화된 데이터 파일(CSV·JSON·Parquet 등), Hive 테이블, 외부 데이터베이스, 기존 RDD까지요. 언어는 Python·Scala·Java·R 모두 지원해요.
SQL과의 상호작용¶
Spark SQL은 SQL 쿼리를 실행하는 용도로도 써요. 한 언어(Scala·Python 등) 안에서 SQL을 돌리면 결과가 Dataset/DataFrame으로 돌아와요. 그리고 어떤 API로 계산을 표현하든 같은 실행 엔진이 쓰여요. 이 통일 덕에 개발자는 특정 변환을 가장 자연스럽게 표현할 수 있는 API를 골라 쓰고, 필요할 때 자유롭게 SQL과 DataFrame API를 오가며 쓸 수 있어요.
스키마 정보가 주는 최적화¶
RDD API가 "어떤 요소들의 모음"만 알려주는 반면, Spark SQL은 데이터의 스키마와 계산의 구조를 알려줘요. 이 추가 정보를 Spark가 최적화에 활용하므로, 같은 작업이라도 DataFrame/SQL 경로가 더 좋은 실행 계획을 만들 수 있어요. 이것이 "구조화된 API가 낫다"고 흔히 말하는 이유예요.
실제 적용 (데이터스케쳐스)¶
Events 파이프라인의 대용량 변환은 표준 스키마를 가진 이벤트를 다루므로, RDD를 직접 조작하는 것보다 DataFrame·SQL로 처리하는 편이 어울려요. 예를 들어 원천 이벤트를 읽어 필요한 컬럼만 골라 정리하고, 표준 스키마 기준으로 그룹·집계한 뒤 창고에 적재하는 흐름을 DataFrame API로 짜면, 스키마 덕에 검증도 쉽고 실행 계획도 최적화돼요.
여기서 기억할 점은 SQL과 DataFrame API가 같은 엔진이라 팀별로 선호하는 표현을 골라 쓸 수 있다는 거예요. 하지만 데이터의 스키마가 명확해야 최적화 의미가 있으므로, 표준 스키마를 먼저 정하고 그 위에 DataFrame/SQL 변환을 얹는 게 좋아요. 분산 처리의 근본 추상화는 RDD와 데이터셋, 그리고 이 변환을 언제·어떻게 돌릴지는 Airflow에서 이어져요.
더 알아보기¶
- 공식 문서 (1차)
- Spark SQL, DataFrames and Datasets Guide — spark.apache.org/docs/latest/sql-programming-guide.html
- Getting Started — spark.apache.org/docs/latest/sql-getting-started.html
- 큐레이션/블로그 (2차)
- Performance Tuning — spark.apache.org/docs/latest/sql-performance-tuning.html