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 형태로 반환된다. 물론 모든 요소를 단일 파티션에 저장할 수 있을 만큼 데이터가 충분히 작아야 한다.