피드로 돌아가기
Understanding Join Strategies in PySpark (With Real-World Insights)
Dev.toDev.to
Database

Shuffle 비용 최소화를 통한 PySpark Join 성능 최적화 전략

Understanding Join Strategies in PySpark (With Real-World Insights)

RASMIN BHALLA2026년 4월 11일2intermediate

Context

분산 환경의 Spark 시스템에서 데이터 노드 간 이동을 유발하는 Shuffle 작업이 심각한 성능 병목 지점으로 작용. Catalyst Optimizer의 자동 선택에 의존한 Join 전략은 대규모 데이터셋의 특성을 완전히 반영하지 못해 실행 시간과 비용을 증가시킴.

Technical Solution

  • 소규모 테이블을 모든 워커 노드에 복제하여 Shuffle을 원천 차단하는 Broadcast Hash Join 적용
  • 대용량 테이블 간 Join 시 데이터를 정렬 후 병합하여 메모리 효율을 높이는 Sort Merge Join 활용
  • 중간 규모 데이터셋 대상의 해시 기반 분산 처리를 통한 Shuffle Hash Join 수행
  • 데이터 편향(Data Skew)으로 인한 특정 노드 과부하 해결을 위한 Salting 기법 도입
  • spark.sql.autoBroadcastJoinThreshold 설정을 통한 Broadcast 임계치 제어 및 Hint 기반의 전략 강제 지정

1. Dimension 테이블 크기 확인 후 Broadcast Hash Join 적용 가능 여부 검토

2. Join Key의 데이터 분포를 분석하여 Skew 발생 시 Salting 처리 적용

3. 대량 데이터 Join 전 Repartition을 통한 데이터 균등 분산 수행

4. Join 조건 내 함수 사용을 지양하고 정제된 Key 기반의 조인 설계

원문 읽기