GraphX:给定一个VertexID获取所有连接的顶点

时间:2016-03-14 09:38:30

标签: apache-spark spark-graphx

所以基本上我在GraphX的图形中有一个图形和一个特定顶点的ID。

鉴于VertexID,如何将所有直接连接的顶点连接到该顶点? (IE,只有一个边缘)。

谢谢

1 个答案:

答案 0 :(得分:1)

假设您希望使用GraphX Programming Guide中的示例图表找到直接连接到“franklin”(VertexId 5L)的所有用户。最简单且可能最有效的方法是使用collectNeighborIds / graph.collectNeighbors后跟lookup

import org.apache.spark.graphx.EdgeDirection

val direction: EdgeDirection = ???  // In, Out ...
graph.collectNeighborIds(direction).lookup(5L)

另一种方法是使用tripletsfilter结果:

// "franklin" is source
graph.triplets.collect {
  case t if t.srcId == 5L => t.dstId
}

当然,您可以添加其他指示并传递其他信息,例如srcAttrdstAttrvertexAttr。如果您希望保留完整的三元组,则可以将collect替换为filter。然而,如果你需要单边/顶点查找,Spark很可能不是最好的工具。