gpt4 book ai didi

apache-spark - graphx graph.apply 构造器方法 - 边分割

转载 作者:行者123 更新时间:2023-12-05 07:46:12 26 4
gpt4 key购买 nike

我有一个带约 340k 个顶点和约 772k 个边的加权图。我从 HDFS 上的文件构建边和顶点 RDD。

val verticesRDD : RDD[(VertexId, Long)]

val edgesRDD : RDD[Edge[Double]]

根据这些 RDD,我使用 .apply 方法创建了一个图。

val my_graph: Graph[(Long),Double] = Graph.apply(verticesRDD, edgesRDD)

然后,我计算一系列输入的最短路径算法。这在单节点实现上效果很好。但是,当我在具有多个节点的集群模式下运行时,我没有看到加速或硬件利用率。

阅读文档,我看到“GraphX 提供了几种从 RDD 或磁盘中的顶点和边集合构建图的方法。默认情况下,没有一个图构建器会重新划分图的边;相反,边缘保留在它们的默认分区中(例如它们在 HDFS 中的原始 block )。"

因此,我没有看到加速是有道理的,因为边缘保留在 HDFS 上的原始默认分区中。

然后我尝试了 partitionBy(PartitionStrategy.RandomVertexCut) 方法,但这显然对重新划分边没有帮助。

我发现有一个 minEdgePartitions 参数用于使用 fromEdgeTuples 方法构建图形。

如何使用 graph.apply 构造函数方法对边进行分区?

最佳答案

fromEdgeTuples 使用的 minEdgePartitions 参数被传递给它的 RDD 构建器,所以在这里你应该做的以获得相同的结果(分区边)是首先构建一个分区 edgeRDD 而不是将其传递给 graph.apply

val parts = 100
val edgesRDD : RDD[Edge[Double]] = sc.textFile[Edge[Double]]]("/path/to/file",
minPartitions = parts)
val verticesRDD : RDD[(VertexId, Long)]
val my_graph: Graph[(Long),Double] = Graph.apply(verticesRDD, edgesRDD)

关于apache-spark - graphx graph.apply 构造器方法 - 边分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com