Apache Spark计算最短路径

问题描述 投票:2回答:1

我正在尝试根据不使用Apache Spark的权重来计算大型网络中从给定源到给定目标的最短路径。由于我所有其他代码都是用python编写的,所以我不想更改。应该以某种方式可能,不是吗?由于我是Spark的新手,所以也许看不到如何解决问题。

也许有人可以帮助我吗?预先感谢!

到目前为止我尝试过的:

  • 创建顶点和边列表
  • 使用GraphFrame()创建图
  • 取消使用GraphFrames最短路径方法来计算最短路径

到目前为止还不错(不是真的)。 GraphFrames最短路径方法的问题在于,它计算从每个节点到给定节点集的最短路径,该路径适用于小型图,但对于大型网络却需要一定的时间。因为考虑了所有节点,所以完成了许多“不必要的”计算。我只需要获得从一个节点到另一节点的最短路径。

我正在互联网上搜索,发现Spark graphx库具有我正在寻找的功能,但可悲的是,它仅适用于Scala ...

也许我只是可以使用rdds根据权重计算最短路径?还是我找不到的pyspark的最短路径实现?无法相信pyspark没有实现最短路径算法。

    vertices_rdd = vertices_rdd3.zipWithIndex()
    # vertices_rdd.take(3): 
    # [((552897.813699282, 4164322.19502139), 0), ((583743.487097408, 4158379.86761575), 1), ((585964.589845657, 4158443.96863072), 2)]

    edges_rdd = edges_rdd1.flatMap(lambda x: x)
    # edges_rdd.take(3): 
    # [(62734, 107857, 102.19468251940246, '8'), (107857, 62734, 102.19468251940246, '8'), (79903, 191109, 21.81675476329727, '13')]

    spark = SparkSession(sc)

    vertices_df = vertices_rdd.toDF(["coordinate","id"])
    edges_df = edges_rdd.toDF(["src", "dst", "distance", "streetclass"])

    vertices_df.show()
    #+--------------------+---+
    #|          coordinate| id|
    #+--------------------+---+
    #|[552897.813699282...|  0|
    #|[583743.487097408...|  1|
    #|[585964.589845657...|  2|
    #|[588646.795215483...|  3|
    #|[582405.137425844...|  4|
    #|[582823.612980657...|  5|
    #...

    edges_df.show()
    #+------+------+------------------+-----------+
    #|   src|   dst|          distance|streetclass|
    #+------+------+------------------+-----------+
    #| 62734|107857|102.19468251940246|          8|
    #|107857| 62734|102.19468251940246|          8|
    #| 79903|191109| 21.81675476329727|         13|
    #|191109| 79903| 21.81675476329727|         13|
    #| 60790| 66205|19.362434806339824|         13|
    #... 

    from graphframes import *
    g = GraphFrame(vertices_df, edges_df)

    results = g.shortestPaths(landmarks=["0"])
    results.select("id", "distances").show()
    #+---+-----------+
    #| id|  distances|
    #+---+-----------+
    #|  0|Map(0 -> 0)|
    #|  7|Map(0 -> 1)|
    #|  6|      Map()|
    #|  9|      Map()|
    #|  5|      Map()|
    #|  1|      Map()|
    #|  3|      Map()|
    #|  8|      Map()|
    #...
apache-spark graph pyspark shortest-path graphframes
1个回答
0
投票

回答为时已晚,但是如果有人在寻找该主题,可以使用此链接GraphFrames

© www.soinside.com 2019 - 2024. All rights reserved.