더북(TheBook)

4.3.3.1 groupByKey나 groupBy 변환 연산자로 데이터 그루핑

groupByKey 변환 연산자는 동일한 키를 가진 모든 요소를 단일 키-값 쌍으로 모은 Pair RDD를 반환한다. 다음 예제를 살펴보자.

(A, 1) 
(A, 2)                (A, (1, 2)) 
(B, 1)       ->       (B, (1, 3)) 
(B, 3)                (C, (1))  
(C, 1)

 

결과 RDD는 (K, Iterable[V]) 타입의 요소로 구성된다. 각 요소의 Iterable[V]로 해당 키의 모든 값에 반복문을 적용할 수 있다.

groupBy는 Pair RDD가 아닌 일반 RDD에서도 사용할 수 있으며, 일반 RDD를 Pair RDD로 변환하고 groupByKey를 호출하는 것과 같은 결과를 만들 수 있다. 예를 들어 임의의 T 타입 요소로 구성된 RDD[T]T 타입 요소에서 K 타입의 키를 생성하는 함수(f: T => K)를 사용해 다음과 같이 groupBy를 호출할 수 있다. 두 메서드는 같은 결과를 반환한다.

rdd.map(x => (f(x), x)).groupByKey()
rdd.groupBy(f)

 

groupByKey는 각 키의 모든 값을 메모리로 가져오기 때문에 이 메서드를 사용할 때는 메모리 리소스를 과다하게 사용하지 않도록 주의해야 한다. 모든 값을 한꺼번에 그루핑할 필요가 없으면(예: 각 키별 평균을 계산할 때) aggregateByKeyreduceByKey, foldByKey를 사용하는 것이 좋다. 다른 Pair RDD의 변환 연산자와 마찬가지로 groupByKeygroupBy 또한 파티션 개수를 받는 버전과 사용자 정의 Partitioner를 받는 버전을 추가로 제공한다.

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