использование mapVertices для изменения атрибута (массива) вершины - PullRequest
0 голосов
/ 31 марта 2019

Привет, я новичок в 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

теперь проблема в том, что номер элемента в массиве атрибута вершины графа не всегда равен 2, иногда он может быть больше 2. Поэтому, если номер элемента в массиве равен 3, код выше не может работа.

Я попытался использовать цикл, чтобы сделать это:

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

но вместо этого я получил пустой массив для каждой вершины. цикл невозможен в mapVertices?

так есть ли способ сделать это? использует mapVertices путь? я не могу придумать какой-либо другой способ изменить значение вершин. Спасибо, любая помощь приветствуется

...