더북(TheBook)

4.2.4.1 mapPartitions와 mapPartitionsWithIndex

mapPartitions는 매핑 함수를 인수로 받는다는 점에서 map과 동일하지만, 매핑 함수를 Iterator[T] => Iterator[U]의 시그니처로 정의해야 한다는 점은 다르다. mapPartitions의 매핑 함수는 각 파티션의 모든 요소를 반복문으로 처리하고 새로운 RDD 파티션을 생성한다.

mapPartitionWithIndex 또한 mapPartitions와 유사하지만, 매핑 함수에 파티션 번호가 함께 전달된다는 점은 다르다[함수 시그니처: (Int, Iterator[T]) => Iterator[U]]. 매핑 함수는 이 파티션 번호를 매핑 작업에 활용할 수 있다.

매핑 함수에는 입력 Iterator를 새로운 Iterator로 변환하는 코드를 구현해야 한다. 스칼라는 다음과 같이 다양한 Iterator 관련 함수를 제공한다.11

map, flatMap, zip, zipWithIndex 등 함수를 Iterator의 각 요소에 적용할 수 있다.

take(n)이나 takeWhile(condition)을 사용해 일부 요소를 가져올 수 있다.

drop(n)이나 dropWhile(condition)을 사용해 일부 요소를 제외할 수 있다.

filter로 요소를 필터링할 수 있다.

slice(m, n)을 사용해 입력 Iterator의 부분 집합을 가져올 수 있다.

이 함수들은 모두 새로운 Iterator를 생성하므로 매핑 함수의 반환 값에 그대로 사용할 수 있다.

 

11 함수 전체 목록은 http://mng.bz/CWA6을 참고하자.

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