1

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

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

我的数据是一个稀疏的二分图,每次迭代都会更新一条边的顶点数据。例如,这里是一条边,和(srcAttr, dstAttr, attr)的顶点将根据 进行修改。因此,我需要的是获取所有组合,并用于更新.srcAttrdstAttrattr(srcAttr, dstAttr, attr)attrvertices

Graphx 提供了mapTriplets可以转换所有 (srcAttr, dstAttr, attr) 组合的方法,但是我不知道在执行此方法时如何修改顶点。

那么,有没有什么策略可以在遍历所有边的时候修改顶点呢?

4

1 回答 1

5

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

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

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

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

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

并返回VertexRDD可进一步用于构造新图的 a。

于 2015-12-01T13:20:21.447 回答