Spark的Graphx中的mapTriplets操作可以将三元组转换为定义描述的其他形式:
def mapTriplets[ED2](map: EdgeTriplet[VD, ED] => ED2): Graph[VD, ED2]
我的数据是稀疏的二分图,边缘的顶点数据将在每次迭代期间更新。例如,这是一个边(srcAttr, dstAttr, attr)
,srcAttr
和dstAttr
的顶点将根据attr
进行修改。因此,我需要的是获取所有(srcAttr, dstAttr, attr)
组合,并使用attr
更新vertices
。
Graphx提供了mapTriplets
方法,它可以转换所有(srcAttr,dstAttr,attr)组合,但我无法弄清楚在执行此方法时如何修改顶点。
那么,是否有任何策略可以在遍历所有边时修改顶点?
答案 0 :(得分:4)
我无法弄清楚在执行此方法时如何修改顶点
因为根本不可能。首先,与Spark中的其他分布式数据结构相同的GraphX数据结构是不可变的。此外,mapTriplets
旨在转换边而不是顶点。
是否有任何策略可以在遍历所有边时修改顶点?
如果你想使用边缘数据变换顶点,那么aggregateMessages
应该给你你想要的。它需要两个功能
EdgeContext
到Unit
的一个,可用于向源节点和/或目标节点发送消息并返回VertexRDD
,可以进一步用于构建新图。