我想使用Scala和GraphX计算源节点和目标节点之间的最短距离。但是以下代码给出了所有节点之间的最短距离。
val sourceId: VertexId = 37
val g = graph.mapVertices( (id, _) =>
if (id == sourceId) 0.0
else Double.PositiveInfinity
)
val sssp = g.pregel(Double.PositiveInfinity)(
(id, dist, newDist) => math.min(dist, newDist),
triplet => {
if (triplet.srcAttr + triplet.attr < triplet.dstAttr) {
Iterator((triplet.dstId, triplet.srcAttr + triplet.attr))
}
else {
Iterator.empty
}
},
(a, b) => math.min(a, b)
)
输出:
(Dest Node,shortest Distance )
(18,991.6112077930221)
(38,379.8315724661152)
(14,1442.036238189988)
(22,1494.3250833673349)
(30,451.119421079875)
(10,1525.2322402611999)
(56,2313.01408644027)
(20,970.9823341266101)
例如:我想计算源节点:37到目标节点之间的距离:18,而不是所有节点之间的距离。 能否指导我如何在此代码中指定目标节点,以便我可以找到源和目标之间的正好距离,而不是在所有节点之间。
答案 0 :(得分:2)
如何过滤输出,只留下您感兴趣的节点?在你的情况下,这将是:
sssp.vertices.filter { case (destId, _) =>
destId == 18
}
会在输出中留下(18,991.6112077930221)
。