【问题标题】:How to modify vertex data when calling the mapTriplets method in Graphx of SparkSpark的Graphx中调用mapTriplets方法时如何修改顶点数据
【发布时间】:2016-03-05 09:22:18
【问题描述】:

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)组合,但是我不知道在执行这个方法时如何修改顶点。

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

【问题讨论】:

    标签: scala apache-spark spark-graphx


    【解决方案1】:

    执行此方法时我不知道如何修改顶点

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

    有没有什么策略可以在遍历所有边时修改顶点?

    如果您想使用边缘数据转换顶点,那么aggregateMessages 应该可以满足您的需求。它需要两个函数

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多