더북(TheBook)

4.5.1.2 Accumulable 컬렉션에 값 누적

SparkContext.accumulableCollection()을 사용하면 따로 암시적 객체를 정의할 필요 없이 가변 컬렉션에 값을 누적할 수 있다. 커스텀 Accumulator는 다양한 기능을 제공하지만, 단순한 형태의 컬렉션 누적 변수만 필요하다면 accumulableCollection을 사용하는 것이 더 편리하다. 예를 들어 앞 예제에서 생성한 rdd 요소를 다음과 같이 공유 컬렉션(즉, 여러 실행자가 값을 추가할 수 있는 공용 컬렉션)에 누적할 수 있다.

scala> import scala.collection.mutable.MutableList
scala> val colacc = sc.accumulableCollection(MutableList[Int]())
scala> rdd.foreach(x => colacc += x)
scala> colacc.value
res0: scala.collection.mutable.MutableList[Int] = MutableList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 31, 32, 33, ...)

 

출력 결과를 살펴보면 결과 리스트가 정렬되지 않았다는 것을 알 수 있다(10 다음에 11 대신 31을 출력했다). 이는 각 파티션에서 생성된 누적 변수를 드라이버에 순서대로 반환한다는 보장이 없기 때문이다.

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