Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在Graphx中的Pregel Api中广播图形?_Apache Spark_Spark Graphx - Fatal编程技术网

Apache spark 在Graphx中的Pregel Api中广播图形?

Apache spark 在Graphx中的Pregel Api中广播图形?,apache-spark,spark-graphx,Apache Spark,Spark Graphx,我想做的是将我创建的图广播到所有的顶点,然后每个顶点可以在这个图上进行自己的计算,以计算相对于作为源顶点的自身的最短路径?当我尝试访问compute方法中的图形时,下面的代码始终为我提供: java.lang.NullPointerException val result=graph.pregel(graph,Int.MaxValue,EdgeDirection.Out)((id, value, msg) => compute(msg,id),triplet => Iterator.

我想做的是将我创建的图广播到所有的顶点,然后每个顶点可以在这个图上进行自己的计算,以计算相对于作为源顶点的自身的最短路径?当我尝试访问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)

除非您有迭代限制,或者希望计算到(临时)更改节点的最短路径,否则借助
org.apache.spark.graphx.lib.shortestpath
,并在每个顶点上调用它,计算起来可能会容易得多

无论采用哪种方式,仅对于中等大小的图形,这方面的内存消耗都会超出比例。除非您有一个非常大的集群,或者只有一个小的图,否则这很可能是一个无法克服的任务


提供关于您的设置的进一步信息可能会改进给出的答案。

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

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


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

你能给出一个包含数据和预期输出的可复制的例子吗?我想确切地说,如果我们假设诸如介数中心性或所有对最短路径之类的算法,或者任何需要对图的每个顶点进行计算的算法,那么我们一定要有(对每个顶点v进行一些计算)。我只想在一个图上并行地对循环执行此操作,但这样一来,spark的优化就不可避免地失去了,因为它的效率取决于任务的并行分布。若您只想在一个图形上执行此操作(顺便说一句,这是不可能的,因为最短路径确实返回另一个具有路径长度作为顶点属性的图形)。问题是您似乎忘记了中心性和pageRank都有迭代解,每个节点没有不同的图