我有三个矩阵(A,B和C)作为单独的RDD,我需要将它们作为矩阵块在工作节点之间进行分区。我执行的操作需要更新矩阵块,但我需要在矩阵块上进行同步,以便两个工作节点不会同时更新相同的矩阵块。我该如何实现这种同步。有锁定机制吗?我是Spark(PySpark)的新手。
是否可以控制Spark如何进行分区,即控制将哪个块发送到哪个工作节点?
请帮忙。
答案 0 :(得分:1)
从技术上讲,这完全没关系。在Spark中没有这样一个共享的,可变的状态(人们可能会认为accumulators
就是这种情况,但不要再纠缠于此)。这意味着没有计算可以修改共享状态的情况,并且需要任何类型的锁。
这在JVM上有点复杂,但PySpark架构提供了工作人员之间的完全隔离,所以除非你去外面Spark你的保险箱。如果您这样做,您有责任使用特定于上下文的方法处理冲突。
最后,如果您尝试修改数据(请不要将其与RDD混合)到位,这只是一个编程错误。它可能导致JVM上一些非常丑陋的东西,但再一次应该对PySpark没有明显的影响(这只是一个实现而不是合同的问题)。每个更改都应使用转换表示,并且只要没有另外指定(请参阅例如fold
或aggregate
系列),就不应修改现有数据。