2016-03-14 6 views
1

Так что в основном у меня есть график и идентификатор определенной вершины на графике в GraphX.GraphX: Дано один VertexID получить все связанные вершины

Учитывая, что VertexID, как мне получить все непосредственно связанные вершины с этой вершиной? (IE, только один край).

Спасибо

ответ

1

Давайте предположим, что вы хотите, чтобы найти всех пользователей, непосредственно связанные с «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, скорее всего, не лучший инструмент для работы.

Смежные вопросы