使用mapVertices更改顶点的属性(数组)

时间:2019-03-31 19:29:40

标签: apache-spark spark-graphx

您是Scala和graphx的新手。所以我有一个顶点这样的图

graph.vertices.collect

 Array[(org.apache.spark.graphx.VertexId, Array[Double])] = Array((1,Array(0.5, 0.5)), (2,Array(0.25, 0.0625)), (3,Array(0.125, 0.125)), (4,Array(0.0625, 0.0625)), (5,Array(0.0625, 0.25)))

现在说我想用一个数字(从一个数组中)划分每个第一个数组元素,并用一个不同的数字划分每个第二个数组元素,我用mapVertices这样做:

var newGraph=graph.mapVertices((id, v) => {
   (v(0)/num(0),v(1)/num(1)
}).vertices.collect

现在的问题是,图的顶点的array属性中的元素数不总是2,有时可能大于2。因此,如果数组中元素的数为3,则上面的代码不能工作。

我尝试使用循环来完成它:

var j=graph.mapVertices((id, v) => {
 for(i <- 0 until 2){
 v(i)/num(i)
}
}).vertices.collect

但是结果却是每个顶点都有一个空数组。 mapVertices中不能循环吗?

那么有什么办法可以做到这一点?使用mapVertices的路要走吗?我想不出任何其他方法来更改顶点值。谢谢任何帮助

0 个答案:

没有答案