2015-09-16 11 views
6

supponiamo di avere ottenuto l'ingresso in Apache Graphx come:Ottenere tutti i nodi connessi ad un nodo in Apache Spark Graphx

Vertex RDD:

val vertexArray = Array(
    (1L, "Alice"), 
    (2L, "Bob"), 
    (3L, "Charlie"), 
    (4L, "David"), 
    (5L, "Ed"), 
    (6L, "Fran") 
) 

bordo RDD:

val edgeArray = Array(
    Edge(1L, 2L, 1), 
    Edge(2L, 3L, 1), 
    Edge(3L, 4L, 1), 
    Edge(5L, 6L, 1) 
) 

Ho bisogno di tutti i componenti collegati ad un nodo in Apache Spark GraphX ​​

1,[1,2,3,4] 
5,[5,6] 
+0

OK, in modo da capire che cosa avete bisogno. Che cosa hai provato? O ti aspetti che SO scriva il tuo codice per te? –

+0

Non mi aspetto il codice ma solo uno schema di base per questo. E per la domanda se è necessario scrivere le cose che ho provato, penso che renderà la domanda un po 'confusa e non all'altezza. Ho visto il materiale di riferimento per Spark GraphX ​​ma non sono riuscito a ottenere la soluzione per questo. –

+0

Inoltre c'è 'collectNeighbours' che apparentemente fa ciò di cui hai bisogno: http://spark.apache.org/docs/latest/graphx-programming-guide.html#collecting-neighbors – dmitry

risposta

8

È possibile utilizzare ConnectedComponents che restituisce

un grafico con il valore vertice contenente la disponibilità id vertice nel componente collegato contenente quel vertice.

e rimodellare risultati

graph.connectedComponents.vertices.map(_.swap).groupByKey 
+0

Se invece il grafico fosse 6-> 5, 4-> 3-> 3-> 1, ciò produrrebbe il risultato sbagliato, credo. Produrrebbe comunque lo stesso risultato e invece dovrebbe essere (6, [5,6], 4, [1,2,3,4])? –

+0

Questi non sono componenti fortemente connessi e la scelta dell'etichetta è arbitraria. Usare l'id più basso ha senso quindi non penso che ci sia un problema qui. – zero323

+0

Se l'etichetta è arbitraria, sì, d'accordo. Se l'OP voleva l'inizio del sottografo, allora c'è un problema. Ma solo l'OP lo sa. –