Ich war Test graphframes BFS Spielzeug Beispiel:Graphframes BFS Ausgabe
val g: GraphFrame = examples.Graphs.friends
val paths: DataFrame = g.bfs.fromExpr("name = 'Esther'").toExpr("name <> 'Esther'").run()
Das Ergebnis, das ich bekommen ist:
+-------------+------------+------------+
| from| e0| to|
+-------------+------------+------------+
|[e,Esther,32]|[e,f,follow]|[f,Fanny,36]|
|[e,Esther,32]|[e,d,friend]|[d,David,29]|
+-------------+------------+------------+
Das ziemlich seltsam, da Fanny und David auch ausgehende Kanten aufweisen. Und die mit ihnen verbundenen Scheitelpunkte haben auch ausgehende Kanten, z. B. sollte der Ergebnisdatenrahmen nicht nur einen Sprungpfad, sondern alle Pfade vom Quellknoten enthalten.
Ich habe mich ein Spielzeug Diagramm:
1 2
2 3
3 4
4 5
Und wenn ich die gleiche Art von Abfrage:
g.bfs.fromExpr("id = 1").toExpr("id <> 1").run()
ich nur die einen Sprung bekommen noch Nachbarn. Fehle ich etwas? Ich habe auch andere Betreiber getestet, die ohne Erfolg für "nicht gleich" stehen. Eine wilde Vermutung: Vielleicht, wenn BFS wieder den Quellknoten erreicht (er sollte es betrachten, aber seine Nachbarn nicht besuchen), stimmt es nicht mit dem Ausdruck "toExpr" überein und bricht ab.
Eine andere Frage: GraphFrames ist gerichtet, nicht? Um einen "indirekten Graphen" zu erhalten, sollte ich reziproke Kanten hinzufügen, oder?
Daniel, können Sie mir helfen, diese Aussage 'toExpr (" name <> 'Esther' ") zu verstehen', ich bin kein scala Benutzer, aber ich benutze graphframes in Python. Ich verstehe Ihre Ausprägung –
Es ist SQL anderes Signal. Ich habe auch mit "! =" Und "NOT LIKE" anstelle von "<>" getestet. – Daniel