我正在使用scala查找SSSP。您可以在我的代码中看到,我已经使用RandomVertexCut分区策略对图形进行了分区,并且假定边缘已在多个节点中的所有分区中分布。
我想知道SSSP的此代码是否在Spark群集中有效(群集中的所有节点都将运行此代码)。如果此代码仅在主节点上运行,而不在集群中的所有节点上运行,我感到怀疑。
仅供参考:我将其写入sssp.scala文件中,并以这种方式运行:
bin/spark-shell --master spark://<IP Master>:<PORT> --executor-memory 6G -i sssp.scala
源代码:
val graph = GraphLoader.edgeListFile(sc, "data/graphx/followers.txt", false, 12);
val partitionedGraph = graph.partitionBy(PartitionStrategy.RandomVertexCut);
val sourceId = 1;
val initialGraph = partitionedGraph.mapVertices((id, _) => if (id == sourceId) 0.0 else Double.PositiveInfinity);
val sssp = initialGraph.pregel(Double.PositiveInfinity)(
(id, dist, newDist) => math.min(dist, newDist),
triplet => { //send message
if(triplet.srcAttr + 1 < triplet.dstAttr) {
Iterator((triplet.dstId, triplet.srcAttr + 1));
} else {
Iterator.empty
}
},
(a,b) => math.min(a,b)
);
sssp.vertices.foreach(println);