PySpark: Pandas와 Apache Arrow 함께 쓰기
PySpark: Pandas와 Apache Arrow 함께 쓰기
PySpark에서 Pandas와 Apache Arrow를 함께 사용하는 가이드예요. 이 문서는 PySpark가 실행 중에 각 행을 Python으로 보내고 처리한 결과를 다시 수집하는 방식의 성능 병목을, Apache Arrow를 이용해 최적화하는 방법을 다뤄요. 기존 내용은 이제 아카이브로 옮겨졌지만, 핵심 배경과 개념은 여전히 유용해요.
본문
Apache Arrow란?
Apache Arrow는 언어 간 이진 직렬화를 위한 인메모리 컬럼형 데이터 포맷이에요. JVM과 Python 프로세스 사이에서 데이터를 교환할 때, 각 행마다 별도의 직렬화를 수행하면 오버헤드가 커져요. Arrow는 컬럼형 메모리 레이아웃을 그대로 활용해 대량의 데이터를 한 번에 효율적으로 전달할 수 있게 해줘요.
왜 성능 차이가 나는가?
PySpark는 기본적으로 JVM과 Python 사이에서 데이터를 전달할 때 Pickle 기반 직렬화를 사용해요. 레코드 수가 많아질수록 직렬화/역직렬화 비용이 커지죠. Arrow를 활성화하면 데이터가 컬럼형 이진 포맷으로 캡처되어 변환 비용이 크게 줄어들어요.
Arrow 최적화를 켜는 법
Arrow 최적화는 세션 구성으로 켤 수 있어요.
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
이 구성을 켠 뒤 PySpark의 UDF나 grouped aggregator를 사용하면 Arrow 기반 최적 경로가 적용돼요.
추천 워크플로우
- DataFrame을 Pandas로 변환하거나 그 반대로 변환할 때 Arrow를 켜면 일괄 성능이 좋아져요.
- 사용자 정의 함수(UDF)를 자주 쓴다면, Arrow가 지원되는 연산에서 최적화를 활용하세요.
- 데이터가 매우 크다면 메모리 사용량을 고려해 적절한 배치 크기를 잡아야 해요.
이 문서의 전체 내용과 상세 예제는 아카이브 페이지에서 이어져요.
더 알아보기 (Learn more)
- PySpark Pandas with Arrow (아카이브 원문) — Arrow 기반 최적화의 상세 동작 방식과 예제.
- Apache Arrow 공식 문서 — 컬럼형 이진 포맷의 기술적 배경.
- Spark SQL 가이드 — DataFrame과 SQL 일반 사용법.