Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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
Scala Spark GraphX中updaing nodes属性的最佳结构是什么?_Scala_Apache Spark_Rdd_Spark Graphx - Fatal编程技术网

Scala Spark GraphX中updaing nodes属性的最佳结构是什么?

Scala Spark GraphX中updaing nodes属性的最佳结构是什么?,scala,apache-spark,rdd,spark-graphx,Scala,Apache Spark,Rdd,Spark Graphx,有一段时间我一直在寻找更新GraphX中节点属性的方法。我正在处理一个由节点和节点属性组成的图。例如(1,(2,true))。在本例中,1是节点ID,2是节点的标签,true表示访问节点的时间。我用GraphLoader加载了graph,并用RDDs制作了一个分布式图形 我为每个节点使用的结构如下所示: case class nodes_properties(label: Int, isVisited: Boolean = false) var work_graph = graph.

有一段时间我一直在寻找更新GraphX中节点属性的方法。我正在处理一个由节点和节点属性组成的图。例如(1,(2,true))。在本例中,1是节点ID,2是节点的标签,true表示访问节点的时间。我用GraphLoader加载了graph,并用RDDs制作了一个分布式图形

我为每个节点使用的结构如下所示:

case class nodes_properties(label: Int, isVisited: Boolean = false)
      var work_graph = graph.mapVertices { case (node, property) => nodes_properties(node.toInt, false) }.cache()

当我想更新节点属性(例如其标签)时,我使用以下结构:

work_graph = work_graph.mapVertices((vid: VertexId, v: nodes_properties) => {
              if (vid == my_node) nodes_properties(newLabel,true)
              else v
            })
这个结构符合我的要求,但正如我所看到的,它的计算成本非常高,仅对于一个有30000个节点的图,它大约需要4分钟,而当我使用MATLAB进行相同的操作时,它大约需要25秒

问题:在算法过程中,是否有良好的结构或有效、理想的方法来更新图中节点的属性?这对我来说确实是一个瓶颈,我无法解决这个问题

我应该提到,该算法具有迭代性质,在每次迭代中,我需要根据某些条件更新节点属性


注意:我使用
unpersistVertices()
graph.checkpoint()
但是我使用的这个方法在更新节点属性时非常耗时

您是否只需要更新一个特定的vertice?在所有顶点上设置了多少个标签?也许您可以在驱动程序端为(vertice id->vertice properties)等对创建缓存,而不是直接标记顶点。我认为最好更改方法,而不是更改数据结构。如果您在所有顶点上只有几个属性,则可以广播它们并在执行器上使用它们。