GraphX:给定一个 VertexID 获取所有连接的顶点
GraphX: Given one VertexID get all connected Vertices
所以基本上我在 GraphX 中有一个图和一个图中特定顶点的 ID。
鉴于该 VertexID,我如何将所有直接连接的顶点获取到该顶点? (IE,只差一个边)。
谢谢
假设您要使用 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)
另一种方法是使用triplets
和filter
结果:
// "franklin" is source
graph.triplets.collect {
case t if t.srcId == 5L => t.dstId
}
当然,您可以添加其他方向并传递其他信息,例如 srcAttr
、dstAttr
或 vertexAttr
。如果您更喜欢保留完整的三联体,您可以将 collect
替换为 filter
。然而,如果您需要单边/顶点查找,Spark 很可能不是完成这项工作的最佳工具。
所以基本上我在 GraphX 中有一个图和一个图中特定顶点的 ID。
鉴于该 VertexID,我如何将所有直接连接的顶点获取到该顶点? (IE,只差一个边)。
谢谢
假设您要使用 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)
另一种方法是使用triplets
和filter
结果:
// "franklin" is source
graph.triplets.collect {
case t if t.srcId == 5L => t.dstId
}
当然,您可以添加其他方向并传递其他信息,例如 srcAttr
、dstAttr
或 vertexAttr
。如果您更喜欢保留完整的三联体,您可以将 collect
替换为 filter
。然而,如果您需要单边/顶点查找,Spark 很可能不是完成这项工作的最佳工具。