我正在研究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与现有的图连接起来并返回一个新的图?我很困惑。
暂无答案!
目前还没有任何答案,快来回答吧!