Как понять максимиграции в pregel реализации Apache GraphX - PullRequest
1 голос
/ 19 мая 2019

Официальное объяснение состоит в том, что maxIterations будет использоваться для не сходящихся алгоритмов. Мой вопрос: если я не знаю терпкость моего алгоритма, как мне установить значение maxIterations? И, если есть сходящийся алгоритм, так в чем смысл этого значения?

Кстати, я также запутался в «итерации» pregel здесь. Как код выполняет подсчет как итерацию?

Вот часть исходного кода pregel:

// Loop
var prevG: Graph[VD, ED] = null
var i = 0
while (activeMessages > 0 && i < maxIterations) {
  // Receive the messages and update the vertices.
  prevG = g
  g = g.joinVertices(messages)(vprog)
  graphCheckpointer.update(g)

  val oldMessages = messages
  // Send new messages, skipping edges where neither side received a message. We must cache
  // messages so it can be materialized on the next line, allowing us to uncache the previous
  // iteration.
  messages = GraphXUtils.mapReduceTriplets(
    g, sendMsg, mergeMsg, Some((oldMessages, activeDirection)))
  // The call to count() materializes `messages` and the vertices of `g`. This hides oldMessages
  // (depended on by the vertices of g) and the vertices of prevG (depended on by oldMessages
  // and the vertices of g).
  messageCheckpointer.update(messages.asInstanceOf[RDD[(VertexId, A)]])
  activeMessages = messages.count()

  logInfo("Pregel finished iteration " + i)

  // Unpersist the RDDs hidden by newly-materialized RDDs
  oldMessages.unpersist(blocking = false)
  prevG.unpersistVertices(blocking = false)
  prevG.edges.unpersist(blocking = false)
  // count the iteration
  i += 1
}

Спасибо за ваши щедрые ответы:)

...