在Spark程序中,我想要定义一个变量,如不可变映射,所有工人程序将同步访问,我该怎么办?我应该定义一个scala对象吗?
不仅是不可变映射,如果我想要一个可以共享的变量并且可以同步更新怎么办?例如,'mutable map','var Int'或'var String'或其他一些?我该怎么办? scala对象变量是否正常?例如:
Object SparkObj{
var x:Int
var y:String
}
x和y只有一个副本而不是几个副本吗?
x和y的更新是否同步?
答案 0 :(得分:3)
如果引用在worker上运行的闭包内的变量,它将被捕获,序列化并发送给worker。例如:
val i = 5
rdd.map(_ + i) // "i" is sent to the workers, they add 5 to each element.
然而,工人们没有发回任何东西。如果您向工作人员中的mutable.Seq
添加内容,则无法从任何位置看到更改。您将修改在执行闭包后丢弃的对象。
Apache Spark提供了许多用于执行分布式计算的基元。同步可变状态不是其中之一。