我有一个带有~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 provides several ways of building a graph from a collection of vertices and edges in an RDD or on disk. None of the graph builders repartitions the graph’s edges by default; instead, edges are left in their default partitions (such as their original blocks in HDFS).
”
因此,在HDFS上,由于边缘留在原始默认分区中,因此我没有看到加速。
然后我尝试了partitionBy(PartitionStrategy.RandomVertexCut)
方法,但这显然无助于重新分区边缘。
我发现使用minEdgePartitions
方法构建图表时有一个fromEdgeTuples
参数。
如何使用graph.apply
构造函数方法对边进行分区?
答案 0 :(得分:0)
minEdgePartitions
使用的fromEdgeTuples
参数传递到其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)