더북(TheBook)

4.2.4.2 파티션의 데이터를 수집하는 glom 변환 연산자

움켜잡다는 뜻의 glom 연산자는 각 파티션의 모든 요소를 배열 하나로 모으고, 이 배열들을 요소로 포함하는 새로운 RDD를 반환한다. 따라서 새로운 RDD에 포함된 요소 개수는 이 RDD의 파티션 개수와 동일하다. glom연산자는 기존의 Partitioner를 제거한다.

다음과 같이 무작위로 생성한 데이터에 glom 연산자를 호출해 보자.

scala> val list = List.fill(500)(scala.util.Random.nextInt(100))
list: List[Int] = List(88, 59, 78, 94, 34, 47, 49, 31, 84, 47, ...)
scala> val rdd = sc.parallelize(list, 30).glom()
rdd: org.apache.spark.rdd.RDD[Array[Int]] = MapPartitionsRDD[0]
scala> rdd.collect()
res0: Array[Array[Int]] = Array(Array(88, 59, 78, 94,...), ...)
scala> rdd.count()
res1: Long = 30

 

이 코드는 파티션 30개에 분산된 RDD를 생성한 후 glom 연산자를 호출한다. 출력 결과를 살펴보면 glom이 반환한 RDD 요소는 각 파티션의 데이터로 구성된 배열이며, 배열 객체의 개수 또한 30개라는 것을 알 수 있다.

glom을 잘 활용하면 RDD를 손쉽게 단일 배열로 만들 수 있다. 우선 RDD의 파티션 개수를 한 개로 만든 후 glom을 호출하면 기존 RDD의 모든 요소를 포함한 단일 배열이 RDD 형태로 반환된다. 물론 모든 요소를 단일 파티션에 저장할 수 있을 만큼 데이터가 충분히 작아야 한다.

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