Какую структуру лучше выбрать для обновления свойства узлов в Spark GraphX? - PullRequest
0 голосов
/ 05 марта 2020

давно я искал способ обновить свойство узлов в GraphX. я работаю над графиком, который состоит из узлов и свойства узлов. например (1, (2, правда)). в этом примере 1 - это идентификатор узла, 2 - это метка узла, а истина означает, когда узел был посещен. я загрузил график в GraphLoader и создал распределенный граф с помощью СДР.

Структура, которую я использую для каждого узла, выглядит следующим образом:

case class nodes_properties(label: Int, isVisited: Boolean = false)
      var work_graph = graph.mapVertices { case (node, property) => nodes_properties(node.toInt, false) }.cache()

И когда я хочу обновить узлы свойство (например, его метка), я использую следующую структуру:

work_graph = work_graph.mapVertices((vid: VertexId, v: nodes_properties) => {
              if (vid == my_node) nodes_properties(newLabel,true)
              else v
            })

эта структура делает то, что я хочу, но, как я вижу, она настолько затратна в вычислениях и только для графа с 30000 узлами, это занимает около 4 минут, а когда я использую MATLAB для выполнения тех же операций, это занимает около 25 секунд.

Вопрос : Существует ли какая-либо хорошая структура или какой-либо эффективный и идеальный метод для обновления свойства узлы в графе во время алгоритма? это действительно узкое место для меня, и я не могу решить это.

Я должен упомянуть, что алгоритм имеет итеративную природу, и на каждой итерации мне нужно обновлять свойства узлов на основе некоторых условий.

ПРИМЕЧАНИЕ : я использую unpersistVertices() и graph.checkpoint(), но опять-таки этот метод, который у меня есть, требует много времени для обновления свойств узлов!

...