在spark graphx中,有没有更新/修改顶点值的方法

igetnqfo  于 2021-05-24  发布在  Spark
关注(0)|答案(0)|浏览(306)

我正在研究spark graphx,我得到了一个巨大的图形数据集。所有顶点都有case类节点,它保持节点到其他特定节点的距离值。最后,这些距离值是空的,在我的算法中,我需要在运行一些最短路径/距离算法(a*、alt等)时填充它。
我知道vertexrdd和其他所有rdd都是不可变的,任何更改都会创建一个新的rdd。但是在我的例子中,有没有一种方法可以更新这些节点类,或者每次我需要创建一个全新的图来更新一个顶点?
我也不明白spark在代码下面做了什么我有两个case类,用这些case类我在创建顶点,而不是用顶点和边,我在创建一个图

case class IDT(borderIDTList: List[(Long, String, Long)])
case class Node(name: String, isBorderNode: Boolean, partition: String, var idt: Option[IDT])

val vertexN0 = (1L, Node("n0", false, "C1", None))
.
. // I'm creating other vertices and edges manually
.

val verticesRDD = sc.parallelize(seqOfVertices)
val edgesRDD = sc.parallelize(seqOfEdges)

val graph = Graph(verticesRDD, edgesRDD)
graph.cache()

// this part I don't understand
// if all RDD's are immutable how can I get modified graph here

var myIDT: Option[IDT] = Some(IDT(List((3,"a",2))))
graph.vertices.filter(vertex => vertex._1 == 1L).foreach(vtx => vtx._2.idt = myIDT)

graph.vertices.collect().foreach(println(_))

上面的代码给出了一个在vertex id=1中具有新idt值的图
顶点返回一个新的顶点,在这里进行更改时,图形是如何影响的?这张图是否引用了我从原始图中得到的顶点rdd?
或者在后台spark将新的vertexrdd与现有的图连接起来并返回一个新的图?我很困惑。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题