Spark(PySpark)如何同步多个工作节点更新RDD

时间:2016-02-26 14:54:06

标签: apache-spark pyspark

我有三个矩阵(A,B和C)作为单独的RDD,我需要将它们作为矩阵块在工作节点之间进行分区。我执行的操作需要更新矩阵块,但我需要在矩阵块上进行同步,以便两个工作节点不会同时更新相同的矩阵块。我该如何实现这种同步。有锁定机制吗?我是Spark(PySpark)的新手。

是否可以控制Spark如何进行分区,即控制将哪个块发送到哪个工作节点?

请帮忙。

1 个答案:

答案 0 :(得分:1)

从技术上讲,这完全没关系。在Spark中没有这样一个共享的,可变的状态(人们可能会认为accumulators就是这种情况,但不要再纠缠于此)。这意味着没有计算可以修改共享状态的情况,并且需要任何类型的锁。

这在JVM上有点复杂,但PySpark架构提供了工作人员之间的完全隔离,所以除非你去外面Spark你的保险箱。如果您这样做,您有责任使用特定于上下文的方法处理冲突。

最后,如果您尝试修改数据(请不要将其与RDD混合)到位,这只是一个编程错误。它可能导致JVM上一些非常丑陋的东西,但再一次应该对PySpark没有明显的影响(这只是一个实现而不是合同的问题)。每个更改都应使用转换表示,并且只要没有另外指定(请参阅例如foldaggregate系列),就不​​应修改现有数据。