如何在Spark中定义一个全局scala变量,该变量将由所有工作人员共享



在Spark程序中,我想定义一个类似变量的不可变映射,它将被所有工作程序同步访问,我能做什么?我应该定义一个scala对象吗?

不仅仅是不可变的映射,如果我想要一个可以共享并且可以同步更新的变量呢?例如,一个"可变映射"、一个"var Int"或"var String"或其他一些?我能做什么?scala对象变量可以吗?例如:

Object SparkObj{
var x:Int
var y:String
}
  1. x和y是否由驾驶员而非工人维护,并由所有人共享工人
  2. x和y只有一个副本而不是几个副本吗?

  3. 对x和y的更新是同步的吗?

如果引用在worker上运行的闭包中的变量,它将被捕获、序列化并发送给worker。例如:

val i = 5
rdd.map(_ + i) // "i" is sent to the workers, they add 5 to each element.

然而,工人们什么也没寄回来。如果您在工作线程内的mutable.Seq中添加了一些内容,则从任何位置都看不到更改。您将修改一个在执行闭包后被丢弃的对象。

Apache Spark提供了许多用于执行分布式计算的基元。同步可变状态不是其中之一。

最新更新