在Graphx的Pregel Api中播放图表?

时间:2017-03-05 21:12:38

标签: apache-spark spark-graphx

我想要做的是将我创建的图形广播到所有顶点,然后每个顶点可以在此图形上进行自己的计算,以计算相对于自身的最短路径作为源顶点?当我尝试访问方法计算中的图形时,下面的代码总是给我: java.lang.NullPointerException

val result=graph.pregel(graph,Int.MaxValue,EdgeDirection.Out)((id, value, msg) => compute(msg,id),triplet => Iterator.empty,(a, b) => a)

2 个答案:

答案 0 :(得分:1)

如果有人试图做同样的事情,这里是对这个问题的回答。

首先,由于GraphX使用RDD来存储图的顶点和边,因此无法以这种方式广播图,因为我们无法访问另一个RDD内的RDD。 这就是为什么您得到java.lang.NullPointerException的原因。

第二,像这样广播图形是一个坏主意,您可能应该考虑分布式方式来计算每个顶点的最短路径。例如,您可以从每个单个顶点触发最短路径计算,而不必使用一个源顶点,并使用lengthsource标记消息以区分不同的路径。

答案 1 :(得分:0)

除非您有迭代限制,或者想要计算到(暂时)更改节点的最短路径,否则在org.apache.spark.graphx.lib.ShortestPaths [1]的帮助下计算它可能要容易得多,并且调用此方法在每个顶点上。

无论哪种方式,对于中型图形而言,此内存消耗将不成比例。除非你有一个非常大的集群,或者只有一个小图表,否则这很可能是一项难以逾越的任务。

提供有关您的设置的更多信息可能会改善给出的答案。