在Apache Spark Graph中仅选择两个节点之间的距离

时间:2016-11-12 16:28:15

标签: scala apache-spark spark-graphx

我想使用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,而不是所有节点之间的距离。 能否指导我如何在此代码中指定目标节点,以便我可以找到源和目标之间的正好距离,而不是在所有节点之间。

1 个答案:

答案 0 :(得分:2)

如何过滤输出,只留下您感兴趣的节点?在你的情况下,这将是:

sssp.vertices.filter { case (destId, _) =>
  destId == 18
}

会在输出中留下(18,991.6112077930221)