더북(TheBook)

mapValuesflatMapValues를 제외한 Pair RDD의 변환 연산자는 모두 이 두 가지 버전의 메서드를 추가로 제공한다(mapValuesflatMapValues는 항상 파티셔닝을 보존한다). 사용자 정의 Partitioner를 지정하려면 두 번째 버전을 사용해야 한다.

Pair RDD 변환 연산자를 호출할 때 Partitioner를 따로 지정하지 않으면 스파크는 부모 RDD (현재 RDD를 만드는 데 사용한 RDD들)에 지정된 파티션 개수 중 가장 큰 수를 사용한다. Partitioner를 정의한 부모 RDD가 없다면 spark.default.parallelism 매개변수에 지정된 파티션 개수로 HashPartitioner를 사용한다.

또 기본 HashPartitioner를 그대로 사용하면서 임의의 알고리즘으로 키의 해시 코드만 바꾸어도 Pair RDD 데이터의 파티션 배치를 변경할 수 있다. 일부 활용 사례에서는 이 방법이 오히려 구현하기 더 쉽고, 부주의한 셔플링을 피할 수 있어 성능도 향상할 수 있다. 이어서 불필요한 셔플링을 줄이는 방법을 알아보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.