计算Spark上的GraphX中的多步连接

时间:2016-06-01 15:53:05

标签: apache-spark spark-graphx

我一直在寻找Spark文档上的GraphX,我正在尝试计算如何计算图中所有2和可能进一步的步骤连接。

如果我有以下结构

  • A - > b
  • b - > C
  • b - > d

然后A通过B(A - > b - > C)和(A - > b - > D)连接到C和D

我正在查看连接的组件功能,但不确定如何将其扩展到此功能。实际上,b将是一个不同的顶点类型,但不确定它是否有效。

任何建议都会非常感谢我对GraphX很新。

1 个答案:

答案 0 :(得分:0)

看来你只需要使用collectNeighborIds动作,然后加入自身的反向副本。我写了一些代码:

val graph : Graph[Int, Int] = ...
val bros = graph.collectNeighborIds(EdgeDirection.Out)
val flat = bros.flatMap(x => x._2.map(y => (y, x._1)))
val brosofbros : RDD[(VertexId, Array[VertexId])]= flat.join(bros)
.map(x => (x._2._1, x._2._2))
.reduceByKey(_ ++ _)

最后' brosofbros '包含顶点id及其所有第二个邻居,在你的例子中它将是[A,Array [C,D]]。 (但没有B顶点)