我的代码中遇到问题,我在映射调用全局图变量的最短路径的函数时收到空指针异常运行时错误。出于某种原因,即使在终端中初始化距离定期不会引起错误,并且调用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
答案 0 :(得分:1)
正如@DanieldePaula所暗示的那样 - 你不能将分布式方法嵌套在RDD中。相反,ShortestPaths.run
中的逻辑需要被提取并重新表述为直接的scala代码 - 并且没有提及sc
(SparkContext
)方法,SparkJob
或任何其他方法仅驱动程序机制。您需要坚持使用可序列化和与工作器兼容的逻辑。