我正在使用Spark的GraphX图形分析库查看implementation of a certain graph clustering algorithm。我注意到该实现使用了class VertexState和几个可变的(var成员)。
我想知道做这种事情是否会导致不正确的行为,因为在分布式实现中,可以在多个处理节点中复制相同的节点。
我的问题不在于这种做法在这个特定实施的背景下的正确性,而在于一般情况。
也许没关系,只是在顶点集上使用某些函数,例如map,但如果一次使用涉及多个顶点的其他函数,例如mapReduceTriplets,可能会出现问题?
答案 0 :(得分:1)
拥有可变成员就好了...只要你不改变它们。任何类型的数据突变都可能导致不正确或不确定的行为。在某些情况下,您可以将可变累加器与聚合一起使用,但不应修改存储在分布式对象中的数据。