Ich bin ein absoluter Anfänger mit Funken / Hadoop / Graph-Berechnung, bitte Entschuldige meine Anfängerfrage.
Ich habe ein Diagramm mit graphx erstellt. Nun, für jeden Eckpunkt möchte ich bekommen alle seine Nachbarn zweiten Grades. Also wenn mein Graph folgendes ist:
%Vor%Ich möchte etwas wie:
bekommen %Vor%Mein Graph ist sehr groß, also würde ich es gerne elegant und effizient machen.
Ich habe das Gefühl, dass dies nicht allzu schwer sein sollte, aber als ein totaler Neuling für diesen riesigen Rahmen finde ich mich überall in der Dokumentation / Quelle wieder, um diesen herauszufinden.
Hat jemand einen Ratschlag darüber, was der beste Weg ist, das über einen zu tun? Grafikinstanz?
Danke!
In Ihrem Beispiel nehme ich an, dass Sie ein Diagramm erstellen möchten, das eine Kante a - & gt; b wenn nur, wenn in dem ursprünglichen Graph ein Eckpunkt v und Kanten v - & gt; a und v - & gt; b. (Dies kann eine Standarddefinition von "Nachbarn zweiten Grades" in einem gerichteten Graphen sein oder auch nicht, aber trotzdem interessant.)
Hier ist eine Lösung in Scala. Es erzeugt ein Diagramm mit allen ursprünglichen Scheitelpunkten, aber nur die erforderlichen Kanten. Ich lege leere Daten als Daten für alle Ecken und Kanten.
Nehmen wir einen SparkContext sc, wie er normalerweise in der Spark-Shell verwendet wird, und GraphX ist verfügbar, richten Sie das Beispieldiagramm ein:
%Vor%Kombinieren Sie eine alternative Gruppe von Vertices, die jeweils mit der Menge ihrer Nachfolger versehen sind. In Ihrem Beispiel würde v1 mit {v2, v4, v6} kommentiert.
%Vor%Erstellen Sie ein neues Diagramm mit diesen Scheitelpunkten und den ursprünglichen Kanten.
%Vor% Jetzt müssen wir diese Sätze entlang jeder Kante schieben und eine weitere Menge von Scheitelpunkten erzeugen, die diesmal mit ihren Nachbarn kommentiert sind. Wir müssen die Mengen am Zielknoten kombinieren, damit die Verwendung von Scala Set
Duplikate entfernt. Wir müssen auch jeden Eckpunkt aus der Menge seiner Nachbarn entfernen, daher wird der zusätzliche map
am Ende angeheftet.
Jetzt sind wir fast fertig, den endgültigen Graphen zu erstellen, aber wir brauchen eine Kante für jede Nachbarschaftsbeziehung:
%Vor%Jetzt können wir alles zusammensetzen:
%Vor%Ich bin mir sicher, dass ein Experte es besser machen kann, insbesondere in Bezug auf die Leistung, aber die meisten Ideen, auf die es sich stützt, finden Sie im GraphX-Programmierhandbuch .
Tags und Links apache-spark