Давайте предположим, что вы хотите, чтобы найти всех пользователей, непосредственно связанные с «Franklin» (VertexId
5L), используя пример графа из GraphX Programming Guide. Самый простой и, вероятно, наиболее эффективным подходом является использование 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, скорее всего, не лучший инструмент для работы.