스파크에서 조인 수행 최적화 목적으로 Bucketing을 활용한다.
이때 주의할 점이 있다.
- 두 테이블 모두 같은 수의 버킷으로 bucketing
- 두 테이블은 동일한 열에 bucketing
목표
: 셔플/교환을 줄이고 pre- shuffled data 사용하여 테이블을 join 하기
두 테이블이 이미 partitioned 되어 있고, shuffle할 필요가 없음을 catalyst optimizer가 깨닫게 만들기
즉 물리적 실행계획상에
* SortMergeJoin을 적용하기
* 테이블에 broadcast / Hash join 이 적용되지 않게 만들기
Bad Case
- Non- bucketed 와 Bucketed를 Join하면 어짜피 교환작업 수행됨
- 2개의 bucketed table을 조인하더라도, bucket column(Id) 이 아닌 non- bucketed column (employeeID) 을 키로 조인하면 어짜피 교환작업 수행됨
- 버킷 개수가 서로 다른 2개의 테이블 조인 해도 어짜피 교환작업 수행됨
<참고>
https://medium.com/analytics-vidhya/spark-bucketing-is-not-as-simple-as-it-looks-c74f105f4af0
'Spark' 카테고리의 다른 글
[Spark] shuffle 연산 & bucketing 하는 이유 (0) | 2024.07.07 |
---|