apache-spark
공유 변수
수색…
브로드 캐스트 변수
브로드 캐스트 변수는 SparkContext.broadcast
메서드로 만들 수있는 읽기 전용 공유 객체입니다.
val broadcastVariable = sc.broadcast(Array(1, 2, 3))
value
방법을 사용하여 읽음 :
val someRDD = sc.parallelize(Array(1, 2, 3, 4))
someRDD.map(
i => broadcastVariable.value.apply(i % broadcastVariable.value.size)
)
축전지
Accumulators는 쓰기 전용 변수이며 SparkContext.accumulator
로 만들 수 있습니다.
val accumulator = sc.accumulator(0, name = "My accumulator") // name is optional
+=
수정 됨 :
val someRDD = sc.parallelize(Array(1, 2, 3, 4))
someRDD.foreach(element => accumulator += element)
value
메소드를 사용하여 액세스 :
accumulator.value // 'value' is now equal to 10
어큐뮬레이터를 사용하는 것은 스파크가 적어도 한번은 변형을 보증했기 때문에 복잡합니다. 어떤 이유로 든 변환을 다시 계산해야하는 경우 해당 변환 중에 누적 기가 업데이트됩니다. 이는 누적 기 값이 작업이 한 번만 실행 된 경우와 다를 수 있음을 의미합니다.
노트 :
- 실행자는 누적 기의 값을 읽을 수 없습니다 . 드라이버 프로그램 만이 값 메서드를 사용하여 누적 기의 값을 읽을 수 있습니다.
- Java / MapReduce의 카운터와 거의 유사합니다. 따라서 누적기를 카운터에 연결하여 쉽게 이해할 수 있습니다.
스칼라의 사용자 정의 누산기
AccumulatorParam
정의
import org.apache.spark.AccumulatorParam
object StringAccumulator extends AccumulatorParam[String] {
def zero(s: String): String = s
def addInPlace(s1: String, s2: String)= s1 + s2
}
용도:
val accumulator = sc.accumulator("")(StringAccumulator)
sc.parallelize(Array("a", "b", "c")).foreach(accumulator += _)
파이썬의 사용자 정의 누산기
AccumulatorParam
정의 :
from pyspark import AccumulatorParam
class StringAccumulator(AccumulatorParam):
def zero(self, s):
return s
def addInPlace(self, s1, s2):
return s1 + s2
accumulator = sc.accumulator("", StringAccumulator())
def add(x):
global accumulator
accumulator += x
sc.parallelize(["a", "b", "c"]).foreach(add)
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow