데이터 분석이나 전처리를 하다 보면 가장 많이 접하게 되는 객체 중 하나가 바로 DataFrame입니다.
하지만 사용하는 환경에 따라 Pandas의 DataFrame과 Spark의 DataFrame은 구조도, 처리 방식도, 확장성도 전혀 다릅니다.
이 글에서는 두 프레임워크의 DataFrame이 어떻게 다르고, 어떤 상황에서 각각을 써야 하는지 비교해보겠습니다.
Pandas DataFrame
특징
- CSV, Excel, SQL 등 다양한 파일을 쉽게 불러오기
- .groupby(), .pivot(), .merge() 등 강력한 분석 API 제공
- Python 코드와 완벽한 통합 (NumPy, Matplotlib 등과 잘 맞음)
장점
- NumPy 기반으로 구현되어 매우 빠름
→ Pandas의 대부분 연산은 NumPy의 배열 연산 위에서 작동하므로 C로 구현된 내부 연산 덕분에 속도가 빠름 - 직관적인 문법과 빠른 실행
- 소규모 데이터에 최적화
단점
- 메모리에 올릴 수 있는 데이터만 처리 가능 (수백 MB ~ 수 GB 수준)
- 병렬 처리나 분산 처리에는 한계
Spark DataFrame
특징
- Hadoop HDFS, S3, Hive 등 분산 파일 시스템과의 연결 가능
- Catalyst Optimizer와 Tungsten 엔진으로 자동 최적화 및 코드 생성
- SQL + 함수형 API 모두 지원 → SQL과 유사한 쿼리 작성 가능
- 지연 실행(Lazy Evaluation) → 최적화된 실행 계획 생성
- 모든 연산은 새로운 DataFrame 반환 → 원본 불변성 유지
장점
- 수백 GB ~ 수 TB 이상 데이터도 처리 가능
- 병렬 처리 → 속도와 안정성 확보
- 클러스터 기반으로 확장 가능 (Spark Standalone, YARN, Kubernetes 등)
단점
- 초기 설정 및 개발 환경이 다소 복잡
- 실시간 시각화, 디버깅에 제약
- 소규모 데이터에서는 오히려 느릴 수 있음
비교
항목 | Pandas DataFrame | Spark DataFrame |
언어 | Python 전용 | PySpark, Scala, Java, R 등 |
구조 | 메모리 기반 2D 테이블 | 분산 처리 기반 테이블 |
실행 방식 | 즉시 실행 (Eager) | 지연 실행 (Lazy) |
처리 규모 | 수백 MB ~ 수 GB | 수십 GB ~ 수 PB 이상 |
API 스타일 | Pythonic | SQL + 함수형 API |
최적화 | 없음 (수동 최적화) | Catalyst 엔진으로 자동 최적화 |
라이브러리 기반 | NumPy 기반 → 매우 빠름 | Spark SQL 엔진 기반 |
항목 | Pandas | Spark |
컬럼 접근 | df['col'], df[['col1', 'col2']] | df.select('col'), 리스트 접근 X |
컬럼 생성 | df['new'] = df['col'] * 2 | df.withColumn('new', col('col') * 2) |
inplace 수정 | 가능 (inplace=True) | 불가능 → 항상 새로운 객체 반환 |
컬럼 삭제 | df.drop(['col1', 'col2'], axis=1) | df.drop('col1', 'col2') |
여러 컬럼 지정 방식 | 리스트 기반 (['a', 'b']) | 개별 인자 ('a', 'b') |
SQL 스타일 지원 | 일부 기능 (query 등) | 완전한 SQL 표현 지원 (Spark SQL 엔진) |