더북(TheBook)

4.5.1 누적 변수로 실행자에서 데이터 가져오기

 

누적 변수는 여러 실행자가 공유하는 변수로 값을 더하는 연산만 허용한다. 누적 변수를 사용해 스파크 잡의 전역 합계나 카운터(counter)를 구현할 수 있다.

누적 변수는 SparkContext.accumulator(initialValue)를 호출해 생성한다. 또 sc.accumulator (initialValue, "accumulatorName")을 호출하면 누적 변수 이름을 지정할 수 있다. 누적 변수 이름을 지정하면 스파크 웹 UI의 스테이지 상세 페이지에서도 이 변수를 볼 수 있으며, 태스크의 진행 상황을 추적하는 데 사용할 수 있다(자세한 스파크 웹 UI 내용은 11장을 참고하자).

Note

파이썬에서는 누적 변수 이름을 지정할 수 없다.

 

누적 변수 값은 add 메서드나 += 연산자를 사용해 더한다. 또 value 메서드로 변수 값을 가져올 수 있다. 그러나 누적 변수 값은 오직 드라이버만 참조할 수 있다. 실행자가 누적 변수 값에 접근을 시도하면 예외가 발생한다.

이제 누적 변수의 사용 예를 살펴보자.

scala> val acc = sc.accumulator(0, "acc name")
scala> val list = sc.parallelize(1 to 1000000)
scala> list.foreach(x => acc.add(1)) ---- 실행자에서 수행하는 코드다.
scala> acc.value ---- 드라이버에서 수행하는 코드다.
res0: Int = 1000000
scala> list.foreach(x => acc.value) ---- 예외가 발생했다!
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.