PySpark: Pandas와 Apache Arrow 함께 쓰기

PySpark: Pandas와 Apache Arrow 함께 쓰기

PySpark에서 Pandas와 Apache Arrow를 함께 사용하는 가이드예요. 이 문서는 PySpark가 실행 중에 각 행을 Python으로 보내고 처리한 결과를 다시 수집하는 방식의 성능 병목을, Apache Arrow를 이용해 최적화하는 방법을 다뤄요. 기존 내용은 이제 아카이브로 옮겨졌지만, 핵심 배경과 개념은 여전히 유용해요.

출처: PySpark Usage Guide for Pandas with 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)