2015-09-16 4 views
6

Angenommen, wir haben den Eingang in Apache GraphX ​​bekam wie:Holen Sie sich alle Knoten mit einem Knoten in Apache GraphX ​​Funken

Vertex RDD:

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

Rand RDD:

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

Ich brauche alle Komponenten verbunden mit einem Knoten in Apache Spark GraphX ​​

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

OK, so verstehen wir, was Sie brauchen. Was hast du probiert? Oder erwarten Sie, dass SO Ihren Code für Sie schreibt? –

+0

Ich erwarte nicht den Code, sondern nur grundlegende Umrisse dafür. Und für die Frage, ob es erforderlich ist, das Zeug zu schreiben, das ich versucht habe, denke ich, es wird die Frage ein bisschen chaotisch und nicht auf den Punkt bringen. Ich habe das Referenzmaterial für Spark GraphX ​​gesehen, konnte aber keine Lösung dafür finden. –

+0

Auch gibt es 'collectNeighbours', die anscheinend tut, was Sie brauchen: http://spark.apache.org/docs/latest/graphx-programming-guide.html#collecting-neighbors – dmitry

Antwort

8

Sie können verwendet werden, die ConnectedComponents

ein Graph mit dem Scheitelwert der niedrigsten Vertex-ID in der verbundenen Komponente enthält, das zurückkehrt Vertex enthält.

und umformen Ergebnisse

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

Wenn der Graph stattdessen 6-> 5, 4-> 3-> 3-> 1 wäre, würde dies das falsche Ergebnis liefern, denke ich. Es würde immer noch das gleiche Ergebnis liefern und stattdessen sollte es (6, [5,6], 4, [1,2,3,4]) sein? –

+0

Diese sind nicht stark verbundene Komponenten und die Wahl des Labels ist beliebig. Die Verwendung der niedrigsten ID macht Sinn, daher glaube ich nicht, dass hier ein Problem besteht. – zero323

+0

Wenn das Label ist willkürlich, ja, zugestimmt. Wenn das OP den Start des Untergraphen wollte, dann gibt es ein Problem. Aber nur der OP weiß das. –