Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用pregel graphx触发一对一最短路径_Scala_Apache Spark_Shortest Path_Spark Graphx - Fatal编程技术网

Scala 使用pregel graphx触发一对一最短路径

Scala 使用pregel graphx触发一对一最短路径,scala,apache-spark,shortest-path,spark-graphx,Scala,Apache Spark,Shortest Path,Spark Graphx,我尝试使用源代码查找从单个源到n个顶点的最短路径 val图形:图形[长,双]= GraphGenerators.logNormalGraph(sc,numVertices=100).MapEdge(e=>e.attr.toDouble) val sourceId:VertexId=42 val initialGraph=graph.mapVertices((id,)=> if(id==sourceId)0.0 else Double.PositiveInfinity) val sssp=初始图形

我尝试使用源代码查找从单个源到n个顶点的最短路径

val图形:图形[长,双]=
GraphGenerators.logNormalGraph(sc,numVertices=100).MapEdge(e=>e.attr.toDouble)
val sourceId:VertexId=42
val initialGraph=graph.mapVertices((id,)=>
if(id==sourceId)0.0 else Double.PositiveInfinity)
val sssp=初始图形。怀孕(双正确认)(
(id,dist,newDist)=>math.min(dist,newDist),
三重态=>{
if(triplet.srcatr+triplet.attr数学最小值(a,b)
)
println(sssp.vertices.collect.mkString(“\n”))
它为我提供了从42到N个垂直方向的输出最短路径。 但是,如何找到单个源到单个目标之间的最短路径? i、 e.source=42,dest=135然后我想找到它们之间的最短路径


谢谢

如果不浏览整个图形,就无法找到两个顶点之间的最短距离。因为,即使你在目的地收到你的信息后停止探索,也不能保证这是最短的距离。
所以,这个算法在复杂性方面是很好的。您应该只从获得的不同目的地选取sssp值。

在我看来,无法保证其他顶点的按摩处理顺序。是这样吗?
val graph: Graph[Long, Double] =
  GraphGenerators.logNormalGraph(sc, numVertices = 100).mapEdges(e => e.attr.toDouble)
val sourceId: VertexId = 42

val initialGraph = graph.mapVertices((id, _) =>
    if (id == sourceId) 0.0 else Double.PositiveInfinity)
val sssp = initialGraph.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)
)
println(sssp.vertices.collect.mkString("\n"))