Spark GraphX ​​Tutorial - Graph Analytics in Apache Spark



In diesem GraphX ​​Tutorial-Blog werden Sie mit Apache Spark GraphX, seinen Funktionen und Komponenten einschließlich eines Flugdatenanalyseprojekts vertraut gemacht.

GraphX ist die API von Apache Spark für Diagramme und graphparallele Berechnungen. GraphX ​​vereint den ETL-Prozess (Extract, Transform & Load), die explorative Analyse und die iterative Graphberechnung in einem einzigen System. Die Verwendung von Grafiken kann in Facebook-Freunden, LinkedIn-Verbindungen, Internet-Routern, Beziehungen zwischen Galaxien und Sternen in der Astrophysik und in Google Maps angezeigt werden. Obwohl das Konzept der Diagrammberechnung sehr einfach zu sein scheint, sind die Anwendungen von Diagrammen bei Anwendungsfällen in den Bereichen Katastrophenerkennung, Bankwesen, Aktienmarkt, Bankwesen und geografische Systeme, um nur einige zu nennen, buchstäblich unbegrenzt.Das Erlernen der Verwendung dieser API ist ein wichtiger Bestandteil der .In diesem Blog lernen wir anhand von Beispielen die Konzepte von Spark GraphX, seine Funktionen und Komponenten kennen und gehen einen vollständigen Anwendungsfall von Flight Data Analytics mit GraphX ​​durch.

In diesem Spark GraphX-Blog werden die folgenden Themen behandelt:





  1. Was sind Grafiken?
  2. Anwendungsfälle der Diagrammberechnung
  3. Was ist Spark GraphX?
  4. Spark GraphX-Funktionen
  5. Grundlegendes zu GraphX ​​anhand von Beispielen
  6. Anwendungsfall - Flugdatenanalyse mit GraphX

Was sind Grafiken?

Ein Graph ist eine mathematische Struktur, die sich auf eine Menge von Objekten beläuft, in denen einige Paare der Objekte in gewissem Sinne miteinander verbunden sind. Diese Beziehungen können mithilfe von Kanten und Scheitelpunkten dargestellt werden, die einen Graphen bilden. Die Eckpunkte stellen die Objekte dar und die Kanten zeigen die verschiedenen Beziehungen zwischen diesen Objekten.

Grafikkonzepte - Spark GraphX ​​Tutorial - EdurekaZahl: Spark GraphX ​​Tutorial - Eckpunkte, Kanten und Drillinge in Diagrammen



In der Informatik ist ein Graph ein abstrakter Datentyp, der die ungerichteten Graph- und gerichteten Graphkonzepte aus der Mathematik implementieren soll, insbesondere das Gebiet der Graphentheorie. Eine Graphdatenstruktur kann auch jeder Kante einige zuordnen Kantenwert wie ein symbolisches Etikett oder ein numerisches Attribut (Kosten, Kapazität, Länge,usw.).

Anwendungsfälle der Diagrammberechnung

Die folgenden Anwendungsfälle geben einen Überblick über die Diagrammberechnung und bieten weitere Möglichkeiten zur Implementierung anderer Lösungen mithilfe von Diagrammen.

  1. Katastrophenerkennungssystem

    Mithilfe von Diagrammen können Katastrophen wie Hurrikane, Erdbeben, Tsunami, Waldbrände und Vulkane erkannt werden, um Menschen zu warnen.



    Was ist Synchronisation in Java?
  2. Seitenrang Der Page Rank kann verwendet werden, um die Influencer in einem beliebigen Netzwerk wie einem Paper-Citation-Netzwerk oder einem Social-Media-Netzwerk zu finden.
  3. Aufdeckung von Finanzbetrug

    Mithilfe der Diagrammanalyse können Finanztransaktionen überwacht und Personen ermittelt werden, die an Finanzbetrug und Geldwäsche beteiligt sind.

  4. Wirtschaftsanalyse

    Wenn Diagramme zusammen mit maschinellem Lernen verwendet werden, können Sie die Kauftrends der Kunden besser verstehen. Z.B. Uber, McDonald's usw.

  5. Geografisches Informationssystem

    Diagramme werden intensiv zur Entwicklung von Funktionen in geografischen Informationssystemen wie der Abgrenzung von Wassereinzugsgebieten und der Wettervorhersage verwendet.

  6. Google Pregel

    Pregel ist Googles skalierbare und fehlertolerante Plattform mit einer API, die flexibel genug ist, um beliebige Grafiken auszudrückenAlgorithmen.

Was ist Spark GraphX?

GraphX ist die Spark-API für Diagramme und graphparallele Berechnungen. Es enthält eine wachsende Sammlung von Diagrammalgorithmen und Buildern, um die Aufgaben der Diagrammanalyse zu vereinfachen.


GraphX ​​erweitert das Spark-RDD um ein Resilient Distributed Property Graph.
Der Eigenschaftsgraph ist ein gerichteter Multigraph, der mehrere Kanten parallel haben kann. Jeder Kante und jedem Scheitelpunkt sind benutzerdefinierte Eigenschaften zugeordnet. Die parallelen Kanten ermöglichen mehrereBeziehungen zwischen denselben Eckpunkten.

Spark GraphX-Funktionen

Die folgenden Funktionen von Spark GraphX ​​sind verfügbar:

  1. Flexibilität ::
    Spark GraphX ​​funktioniert sowohl mit Grafiken als auch mit Berechnungen. GraphX ​​vereint ETL (Extract, Transform & Load), explorative Analyse und iterative Graphberechnung in einem einzigen System. Mit der Pregel-API können wir dieselben Daten wie Diagramme und Sammlungen anzeigen, Diagramme mit RDDs effizient transformieren und verknüpfen sowie benutzerdefinierte iterative Diagrammalgorithmen schreiben.
  2. Geschwindigkeit ::
    Spark GraphX ​​bietet eine vergleichbare Leistung wie die schnellsten spezialisierten Grafikverarbeitungssysteme. Es ist vergleichbar mit den schnellsten Grafiksystemen und behält gleichzeitig die Flexibilität, Fehlertoleranz und Benutzerfreundlichkeit von Spark bei.
  3. Wachsende Algorithmusbibliothek ::
    Wir können aus einer wachsenden Bibliothek von Graph-Algorithmen auswählen, die Spark GraphX ​​zu bieten hat. Einige der gängigen Algorithmen sind Page Rank, verbundene Komponenten, Label Propagation, SVD ++, stark verbundene Komponenten undDreieckszahl.

Grundlegendes zu GraphX ​​anhand von Beispielen

Wir werden nun die Konzepte von Spark GraphX ​​anhand eines Beispiels verstehen. Betrachten wir ein einfaches Diagramm, wie im Bild unten gezeigt.

Zahl: Spark GraphX ​​Tutorial - Diagrammbeispiel

Wenn wir uns das Diagramm ansehen, können wir Informationen über die Personen (Eckpunkte) und die Beziehungen zwischen ihnen (Kanten) extrahieren. Die Grafik hier zeigt die Twitter-Benutzer und denen sie auf Twitter folgen. Zum Beispiel Bob folgt Davide und Alice auf Twitter.

Lassen Sie uns dasselbe mit Apache Spark implementieren. Zunächst importieren wir die erforderlichen Klassen für GraphX.

// Importieren der erforderlichen Klassen import org.apache.spark._ import org.apache.spark.rdd.RDD import org.apache.spark.util.IntParam import org.apache.spark.graphx._ import org.apache.spark .graphx.util.GraphGenerators

Scheitelpunkte anzeigen ::Außerdem werden jetzt alle Namen und das Alter der Benutzer (Eckpunkte) angezeigt.

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val graph: Graph [(String, Int), Int] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => age> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ name is $ age')}

Die Ausgabe für den obigen Code ist wie folgt:

Davidist42 Franistfünfzig Edist55 Charlieist65

Kanten anzeigen : Schauen wir uns an, welche Person wen auf Twitter mag.

für (Triplett<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

Die Ausgabe für den obigen Code ist wie folgt:

BobLikesAlice BobLikesDavid CharlieLikesBob CharlieLikesFran DavidLikesAlice EdLikesBob EdLikesCharlie EdLikesFran

Nachdem wir die Grundlagen von GraphX ​​verstanden haben, lassen Sie uns etwas tiefer eintauchen und einige erweiterte Berechnungen durchführen.

Anzahl der Follower : Jeder Benutzer in unserer Grafik hat eine andere Anzahl von Followern. Schauen wir uns alle Follower für jeden Benutzer an.

// Definieren einer Klasse, um die Benutzereigenschaftsfallklasse User (Name: String, Alter: Int, inDeg: Int, outDeg: Int) klarer zu modellieren // Erstellen eines Benutzers Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Ausfüllen der Gradinformationen val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Benutzer (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Benutzer (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} für ((id, property)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Die Ausgabe für den obigen Code ist wie folgt:

Nutzer einwird genanntAliceund wird von gemocht2Menschen. Nutzer 2wird genanntBobund wird von gemocht2Menschen. Nutzer 3wird genanntCharlieund wird von gemochteinMenschen. Nutzer 4wird genanntDavidund wird von gemochteinMenschen. Nutzer 5wird genanntEdund wird von gemocht0Menschen. Nutzer 6wird genanntFranund wird von gemocht2Menschen.

Älteste Anhänger : Wir können die Follower auch nach ihren Eigenschaften sortieren. Lassen Sie uns die ältesten Follower jedes Benutzers nach Alter finden.

// Finden des ältesten Followers für jeden Benutzer val ältesteFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Senden Sie für jede Kante eine Nachricht mit dem Attribut der Quelle an den Zielscheitelpunkt Vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age)), // Um ​​Nachrichten zu kombinieren, nehmen Sie die Nachricht für den älteren Follower (a, b) => if (a. _2> b._2) a sonst b)

Die Ausgabe für den obigen Code ist wie folgt:

Davidist der älteste Anhänger vonAlice. Charlieist der älteste Anhänger vonBob. Edist der älteste Anhänger vonCharlie. Bobist der älteste Anhänger vonDavid. Edhat keine Anhänger. Charlieist der älteste Anhänger vonFran. 

Anwendungsfall: Flugdatenanalyse mit Spark GraphX

Nachdem wir die Kernkonzepte von Spark GraphX ​​verstanden haben, können wir ein reales Problem mit GraphX ​​lösen. Dies gibt uns das Vertrauen, in Zukunft an Spark-Projekten arbeiten zu können.

Potenzfunktion in Java für ganze Zahlen

Problemstellung :: Um Echtzeit-Flugdaten mit Spark GraphX ​​zu analysieren, stellen Sie Berechnungsergebnisse in Echtzeit bereit und visualisieren Sie die Ergebnisse mit Google Data Studio.

Anwendungsfall - Durchzuführende Berechnungen ::

  1. Berechnen Sie die Gesamtzahl der Flugrouten
  2. Berechnen und sortieren Sie die längsten Flugrouten
  3. Zeigen Sie den Flughafen mit dem höchsten Scheitelpunkt an
  4. Listen Sie die wichtigsten Flughäfen nach PageRank auf
  5. Listen Sie die Routen mit den niedrigsten Flugkosten auf

Wir werden Spark GraphX ​​für die obigen Berechnungen verwenden und die Ergebnisse mit Google Data Studio visualisieren.

Anwendungsfall - Datensatz ::

Zahl: Anwendungsfall - USA Flugdatensatz

Anwendungsfall - Flussdiagramm ::

In der folgenden Abbildung werden alle Schritte unserer Flugdatenanalyse klar erläutert.

Verwendung der Split-Methode in Java

Zahl: Anwendungsfall - Flussdiagramm der Flugdatenanalyse mit Spark GraphX

Anwendungsfall - Spark-Implementierung ::

Lassen Sie uns nun unser Projekt mit Eclipse IDE for Spark implementieren.

Finden Sie den Pseudocode unten:

// Importieren der erforderlichen Klassen import org.apache.spark._ ... import java.io.File Objekt Airport {def main (args: Array [String]) {// Erstellen einer Fallklasse Flug Fallklasse Flug (dofM: String, dofW: String, ..., dist: Int) // Definieren einer Parse String-Funktion zum Parsen von Eingaben in die Flugklasse def parseFlight (str: String): Flight = {val line = str.split (',') Flight (Zeile (0), Zeile (1), ..., Zeile (16) .toInt)} val conf = new SparkConf (). setAppName ('Flughafen'). setMaster ('local [2]') val sc = new SparkContext (conf) // Lade die Daten in einen RDD-Wert textRDD = sc.textFile ('/ home / edureka / usecases / Airport / Airportdataset.csv') // Analysiere den RDD von CSV-Zeilen in einen RDD von Flugklassen val FlightsRDD = ParseFlight auf Text RDD zuordnen // Flughäfen RDD mit ID und Name erstellen val Flughäfen = Map Flight OriginID und Origin Airports.take (1) // Definieren eines Standardscheitelpunkts namens nirgendwo und Zuordnen der Flughafen-ID für printlns val nirgendwo = 'nirgendwo' val AirportMap = Kartenfunktion verwenden .collect.toList.toMap // Routen erstellen RDD mit sourceID, destinationID und entfernung val routen = flügeRDD. Verwenden Sie die Kartenfunktion .distinct route.take (2) // Erstellen Sie Kanten RDD mit Quell-ID, Ziel-ID und Entfernung val Kanten = Routen.map {(Kartenursprungs-ID und Ziel-ID) => Kante (org_id.toLong, dest_id.toLong, Entfernung)} edge.take (1) // Definiere das Diagramm und zeige einige Eckpunkte und Kanten an. val graph = Graph (Flughäfen, Kanten und Nirgendwo) graph.vertices.take (2) graph.edges.take (2) // Abfrage 1 - Suchen die Gesamtzahl der Flughäfen val numairports = Vertices Number // Abfrage 2 - Berechnen Sie die Gesamtzahl der Routen? val numroutes = Anzahl der Kanten // Abfrage 3 - Berechnen Sie die Routen mit Entfernungen von mehr als 1000 Meilen graph.edges.filter {Kantenabstand ermitteln) => Entfernung> 1000} .take (3) // Schreiben Sie auf ähnliche Weise Scala-Code für die unten Abfragen // Abfrage 4 - Sortieren und Drucken der längsten Routen // Abfrage 5 - Anzeigen von Scheitelpunkten höchsten Grades für eingehende und ausgehende Flüge von Flughäfen // Abfrage 6 - Abrufen des Flughafennamens mit den IDs 10397 und 12478 // Abfrage 7 - Suchen der Flughafen mit den höchsten eingehenden Flügen // Abfrage 8 - Finden Sie den Flughafen mit den höchsten ausgehenden Flügen // Abfrage 9 - Finden Sie die wichtigsten Flughäfen gemäß PageRank // Abfrage 10 - Sortieren Sie die Flughäfen nach Rang // Abfrage 11 - Zeigen Sie die meisten an wichtige Flughäfen // Abfrage 12 - Finden Sie die Routen mit den niedrigsten Flugkosten // Abfrage 13 - Finden Sie Flughäfen und ihre niedrigsten Flugkosten // Abfrage 14 - Zeigen Sie Flughafencodes zusammen mit den sortierten niedrigsten Flugkosten an

Anwendungsfall - Visualisierung der Ergebnisse ::

Wir werden Google Data Studio verwenden, um unsere Analyse zu visualisieren. Google Data Studio ist ein Produkt der Google Analytics 360 Suite. Wir werden den Geo Map-Dienst verwenden, um die Flughäfen an ihren jeweiligen Standorten auf der USA-Karte abzubilden und die Metrikmenge anzuzeigen.

  1. Zeigen Sie die Gesamtzahl der Flüge pro Flughafen an
  2. Zeigen Sie die metrische Summe der Zielrouten von jedem Flughafen an
  3. Zeigen Sie die Gesamtverspätung aller Flüge pro Flughafen an

Damit ist der Spark GraphX-Blog abgeschlossen. Ich hoffe, Sie haben es genossen und fanden es informativ. Schauen Sie sich den nächsten Blog in unserer Apache Spark-Reihe an in Apache Spark marktreif zu werden.

Wir empfehlen Folgendes Apache Spark Training | Video zur Flugdatenanalyse von Edureka zu Beginn mit:

Apache Spark Training | Spark GraphX ​​Flugdatenanalyse | Edureka

Hast du eine Frage an uns? Bitte erwähnen Sie es in den Kommentaren und wir werden uns frühestens bei Ihnen melden.

Wenn Sie Spark lernen und eine Karriere im Bereich Spark aufbauen und Fachwissen für die Durchführung einer umfangreichen Datenverarbeitung mit RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​und Scala mit realen Anwendungsfällen aufbauen möchten, schauen Sie sich unsere interaktiven Live-Anwendungen an -online Hier, Dazu gehört eine 24 * 7-Unterstützung, die Sie während Ihrer gesamten Lernphase begleitet.