在Spark GraphX中,有一种方法可以更新/修改顶点值

问题描述

我正在使用Spark GraphX,并且有一个庞大的图形数据集。在所有顶点中,案例类Node保持从节点到其他特定节点的距离值。 乞求这些距离值是空的,在我的算法中,我需要在运行某些最短的路径/距离算法(A *,ALT等)时将其填充。

我知道VertexRDD和其他所有RDD都是不可变的,任何更改都会创建一个新的RDD。但是就我而言,有没有一种方法可以更新这些Node类,或者每当我需要创建一个全新的图来仅更新一个顶点时是否可以更新?

我也不明白下面代码的火花是什么 我有2个案例类,使用这些案例类创建的是顶点,而不是使用顶点和边创建的是图

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(_))

上面的代码为我提供了一个在顶点id = 1中具有新IDT值的图形

graph.vertices返回新的VertexRDD,并且在此处进行更改时图形的效果如何?该图是否引用了我从原始图衍生而来的VertexRDD?

还是在后台spark将新的VertexRDD与现有图形连接起来并返回一个新图形?我很困惑。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)