如何在Spark的Graphx

时间:2015-12-01 12:38:51

标签: scala apache-spark spark-graphx

Spark的Graphx中的mapTriplets操作可以将三元组转换为定义描述的其他形式:

def mapTriplets[ED2](map: EdgeTriplet[VD, ED] => ED2): Graph[VD, ED2]

我的数据是稀疏的二分图,边缘的顶点数据将在每次迭代期间更新。例如,这是一个边(srcAttr, dstAttr, attr)srcAttrdstAttr的顶点将根据attr进行修改。因此,我需要的是获取所有(srcAttr, dstAttr, attr)组合,并使用attr更新vertices

Graphx提供了mapTriplets方法,它可以转换所有(srcAttr,dstAttr,attr)组合,但我无法弄清楚在执行此方法时如何修改顶点。

那么,是否有任何策略可以在遍历所有边时修改顶点?

1 个答案:

答案 0 :(得分:4)

  

我无法弄清楚在执行此方法时如何修改顶点

因为根本不可能。首先,与Spark中的其他分布式数据结构相同的GraphX数据结构是不可变的。此外,mapTriplets旨在转换边而不是顶点。

  

是否有任何策略可以在遍历所有边时修改顶点?

如果你想使用边缘数据变换顶点,那么aggregateMessages应该给你你想要的。它需要两个功能

  • EdgeContextUnit的一个,可用于向源节点和/或目标节点发送消息
  • 减少每个顶点的消息的第二个

并返回VertexRDD,可以进一步用于构建新图。