提问者:小点点

Spark Scala GraphX:在映射函数中调用最短路径


我的代码中遇到了一个问题,在映射在全局图形变量上调用最短路径的函数时,我收到空指针异常运行时错误。出于某种原因,即使在终端中初始化距离通常不会抛出错误,并且调用 testF() 通常也可以工作,但在映射它时它不起作用。当我删除 testF 函数中的错误距离调用时,该示例工作正常。有谁知道为什么会这样?

val testG = Graph.fromEdges[Int, Int](sc.parallelize(List(Edge(1, 2, 1), Edge(2, 3, 1))), 0)
val testRDD = sc.parallelize(List(1, 2, 3, 4))
def testF() : Int = {
     val distances = ShortestPaths.run(testG, Seq(15134567L))
     return 5
}
testF() //works fine and returns 5
val testR = testRDD.map{case(num) => (num, test())}
testR.take(10).foreach(println) //gives a null pointer error

共1个答案

匿名用户

正如@DanieldePaula提到的 - 你不能在RDD中嵌套分布式方法。相反,ShortestPaths.run中的逻辑需要被提取并重新表述为直接的scala代码 - 并且没有提及scSparkContext)方法,SparkJob或任何其他仅限驱动程序的机制。您需要坚持使用可序列化和与 worker 兼容的逻辑。