Как использовать combiner в агрегатных сообщениях в GraphX - PullRequest
0 голосов
/ 16 мая 2018

В GraphX ​​AggregateMessages API

class Graph[VD, ED] {
  def aggregateMessages[Msg: ClassTag](
      sendMsg: EdgeContext[VD, ED, Msg] => Unit,
      mergeMsg: (Msg, Msg) => Msg,
      tripletFields: TripletFields = TripletFields.All)
    : VertexRDD[Msg]
}

Однако я хочу изменить тип возвращаемого этапа слияния, что означает, что я хочу что-то вроде combineByKey вместо reduceByKey, как я могу сделать это, основываясь на преимуществе GraphX? Или, другими словами, как я могу просто использовать результат sendMsg и пропустить этап mergeMsg этой функции?

Преимущество GraphX, которое я имею в виду, заключается в "центрировании по вершинам", если я использую функции map и combineByKey, это будет производить глобальные перетасовки, которые стоят много времени, вопреки идее "центрирование по вершинам"

1 Ответ

0 голосов
/ 17 мая 2018

API collectEdges in GraphOps может помочь.

Он собирает соседние ребра каждой вершины и может возвращать тип VertexRDD[Array[Edge[ED]]], что означает, что он меняет тип возврата и одновременно собирает сообщениясм. Документация по API

...