我想要做的是将我创建的图传播给所有的顶点,然后每个顶点都可以在这个图上进行自己的计算,以计算相对于自身作为源顶点的最短路径?当我尝试访问compute方法中的图形时,下面的代码总是提供给我:java.lang.NullPointerException
val result=graph.pregel(graph,Int.MaxValue,EdgeDirection.Out)((id, value, msg) => compute(msg,id),triplet => Iterator.empty,(a, b) => a)发布于 2017-03-15 19:07:30
除非您有迭代限制,或者要计算到(临时)更改节点的最短路径,否则借助org.apache.spark.graphx.lib.ShortestPaths [1]并在每个顶点上调用它可能会更容易计算。
无论哪种方式,仅对于中等大小的图形,此操作的内存消耗将不成比例。除非你有一个非常大的集群,或者只有一个很小的图,否则这很可能是一项无法克服的任务。
提供有关您的设置的更多信息可能会改善所给出的答案。
发布于 2020-04-19 22:44:27
如果有人正在尝试做同样的事情,这里是这个问题的答案。
首先,因为GraphX使用RDD来存储图的顶点和边,所以不可能以这种方式广播一个图,因为我们不能访问另一个RDD中的RDD。这就是为什么你会得到一个java.lang.NullPointerException。
其次,像这样广播图表不是一个好主意,你可能应该考虑用分布式的方式来计算每个顶点的最短路径。例如,您可以从每个顶点触发最短路径计算,并使用length和source标记消息,以区分不同的路径,而不是只有一个源顶点。
https://stackoverflow.com/questions/42614085
复制相似问题