graphframes ist ein Netzwerkanalyse-Tool, das auf PySpark DataFrames basiert. Der folgende Code ist eine modifizierte Version des Tutorials subgraphing Beispiels:Die richtige Unterteilung eines PySpark GraphFrame
from graphframes.examples import Graphs
import graphframes
g = Graphs(sqlContext).friends() # Get example graph
# Select subgraph of users older than 30
v2 = g.vertices.filter("age > 30")
g2 = graphframes.GraphFrame(v2, g.edges)
man erwarten würde, dass das neue Diagramm wird g2
weniger Knoten und weniger Kanten enthalten, im Vergleich zu dem ursprünglichen, g
. Dies ist jedoch nicht der Fall:
print(g.vertices.count(), g.edges.count())
print(g2.vertices.count(), g2.edges.count())
den Ausgang gibt:
(6, 7)
(7, 4)
Es ist offensichtlich, dass die resultierende Graph enthält Kanten für nicht vorhandenen Knoten. Noch störender ist die Tatsache, dass g.degrees
und g2.degrees
identisch sind. Dies bedeutet, dass mindestens einige der Diagrammfunktionen die Knoteninformationen ignorieren. Gibt es eine gute Möglichkeit, um sicherzustellen, dass GraphFrame
erstellt ein Diagramm mit nur der Schnittmenge der gelieferten nodes
und edges
Argumente?
> Aber scheint die Anzahl der Scheitelpunkte nach dem Filter korrekt zu sein? Es ist, aber nicht die Anzahl der Kanten. Durch das Entfernen von Scheitelpunkten sollten auch einige Kanten entfernt werden –