Tutorial Spark GraphX ​​- Analize grafice în Apache Spark



Acest blog Tutorial GraphX ​​vă va prezenta Apache Spark GraphX, caracteristicile și componentele sale, inclusiv un proiect de analiză a datelor de zbor.

GraphX este API-ul Apache Spark pentru grafice și calcul paralel grafic. GraphX ​​unifică procesul ETL (Extract, Transform & Load), analiza exploratorie și calculul graficului iterativ într-un singur sistem. Utilizarea graficelor poate fi văzută în prietenii Facebook, conexiunile LinkedIn, routerele de internet, relațiile dintre galaxii și stele în astrofizică și Google Maps. Chiar dacă conceptul de calcul al graficelor pare a fi foarte simplu, aplicațiile graficelor sunt literalmente nelimitate, cu cazuri de utilizare în sistemele de detectare a dezastrelor, bancare, bursiere, bancare și geografice doar pentru a numi câteva.Învățarea utilizării acestui API este o parte importantă a .Prin intermediul acestui blog, vom învăța conceptele Spark GraphX, caracteristicile și componentele sale prin exemple și vom trece printr-un caz de utilizare complet al Flight Data Analytics folosind GraphX.

Vom acoperi următoarele subiecte în acest blog Spark GraphX:





  1. Ce sunt graficele?
  2. Utilizați cazuri de calcul al graficelor
  3. Ce este Spark GraphX?
  4. Caracteristici Spark GraphX
  5. Înțelegerea GraphX ​​cu exemple
  6. Utilizați caz - Analiza datelor de zbor folosind GraphX

Ce sunt graficele?

Un grafic este o structură matematică care se ridică la un set de obiecte în care unele perechi de obiecte sunt legate într-un anumit sens. Aceste relații pot fi reprezentate folosind muchii și vârfuri formând un grafic. Vârfurile reprezintă obiectele, iar marginile arată diferitele relații dintre aceste obiecte.

Concepte grafice - Tutorial Spark GraphX ​​- EdurekaFigura: Tutorial Spark GraphX ​​- Vârfuri, margini și triplete în grafice



În informatică, un grafic este un tip de date abstract care este menit să implementeze conceptele grafice nedirecționate și grafice direcționate din matematică, în special domeniul teoriei graficelor. O structură de date grafice poate asocia, de asemenea, fiecărei margini unele valoarea de margine , cum ar fi o etichetă simbolică sau un atribut numeric (cost, capacitate, lungime,etc.).

ce sunt pachetele în java

Utilizați cazuri de calcul al graficelor

Următoarele cazuri de utilizare oferă o perspectivă asupra calculului graficului și a posibilității suplimentare de implementare a altor soluții folosind grafice.

  1. Sistem de detectare a dezastrelor

    Graficele pot fi folosite pentru a detecta dezastre precum uragane, cutremure, tsunami, incendii forestiere și vulcani, astfel încât să ofere avertismente pentru a alerta oamenii.



  2. Page Rank Page Rank poate fi utilizat pentru a găsi influențatori în orice rețea, cum ar fi rețeaua de citare pe hârtie sau rețeaua de socializare.
  3. Detectarea fraudelor financiare

    Analiza grafică poate fi utilizată pentru a monitoriza tranzacțiile financiare și a detecta persoanele implicate în fraude financiare și spălare de bani.

  4. Analiza afacerii

    Graficele, atunci când sunt utilizate împreună cu Machine Learning, ajută la înțelegerea tendințelor de cumpărare ale clienților. De exemplu. Uber, McDonald’s etc.

  5. Sisteme de informații geografice

    Graficele sunt utilizate intens pentru a dezvolta funcționalități pe sistemele de informații geografice, cum ar fi delimitarea bazinelor hidrografice și predicția vremii.

  6. Google Pregel

    Pregel este platforma Google scalabilă și tolerantă la erori, cu un API suficient de flexibil pentru a exprima un grafic arbitraralgoritmi.

Ce este Spark GraphX?

GraphX este API-ul Spark pentru grafice și calcul paralel grafic. Acesta include o colecție în creștere de algoritmi de grafic și constructori pentru a simplifica sarcinile de analiză a graficelor.


GraphX ​​extinde Spark RDD cu un grafic de proprietăți distribuite rezistent.
Graficul proprietății este un multigraf direcționat care poate avea mai multe muchii în paralel. Fiecare margine și vârf au proprietăți definite de utilizator asociate. Marginile paralele permit multiplerelații între aceleași vârfuri.

Caracteristici Spark GraphX

Următoarele sunt caracteristicile Spark GraphX:

  1. Flexibilitate :
    Spark GraphX ​​funcționează atât cu grafice, cât și cu calcule. GraphX ​​unifică ETL (Extract, Transform & Load), analiza exploratorie și calculul graficului iterativ într-un singur sistem. Putem vizualiza aceleași date ca și graficele și colecțiile, transformăm și unim graficele cu RDD-uri în mod eficient și putem scrie algoritmi grafic iterativi personalizați folosind API-ul Pregel.
  2. Viteză :
    Spark GraphX ​​oferă performanțe comparabile cu cele mai rapide sisteme specializate de procesare a graficelor. Este comparabil cu cele mai rapide sisteme grafice, păstrând în același timp flexibilitatea Spark, toleranța la erori și ușurința de utilizare.
  3. Biblioteca de algoritmi în creștere :
    Putem alege dintr-o bibliotecă în creștere de algoritmi grafici pe care Spark GraphX ​​o poate oferi. Unii dintre algoritmii populari sunt rangul de pagini, componentele conectate, propagarea etichetelor, SVD ++, componentele puternic conectate șinumăr de triunghiuri.

Înțelegerea GraphX ​​cu exemple

Acum vom înțelege conceptele Spark GraphX ​​folosind un exemplu. Să luăm în considerare un grafic simplu așa cum se arată în imaginea de mai jos.

Figura: Tutorial Spark GraphX ​​- Exemplu de grafic

Privind graficul, putem extrage informații despre oameni (vârfuri) și relațiile dintre ei (margini). Graficul de aici reprezintă utilizatorii Twitter și pe care îi urmăresc pe Twitter. De ex. Bob îi urmărește pe Davide și Alice pe Twitter.

Să implementăm același lucru folosind Apache Spark. În primul rând, vom importa clasele necesare pentru GraphX.

// Importul claselor necesare 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

Afișarea vârfurilor :Mai departe, vom afișa acum toate numele și vârstele utilizatorilor (vârfuri).

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')}

Ieșirea pentru codul de mai sus este următoarea:

Davideste42 Franestecincizeci Edeste55 Charlieeste65

Afișarea muchiilor : Să ne uităm la cine îi place pe cine pe Twitter.

pentru (triplet<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

Ieșirea pentru codul de mai sus este următoarea:

Bobîi placeAlice Bobîi placeDavid Charlieîi placeBob Charlieîi placeFran Davidîi placeAlice Edîi placeBob Edîi placeCharlie Edîi placeFran

Acum că am înțeles elementele de bază ale GraphX, să ne scufundăm puțin mai adânc și să efectuăm câteva calcule avansate pe același lucru.

Număr de adepți : Fiecare utilizator din graficul nostru are un număr diferit de urmăritori. Să ne uităm la toți urmăritorii pentru fiecare utilizator.

// Definirea unei clase pentru a modela mai clar clasa de caz a proprietății utilizatorului Utilizator (nume: Șir, vârstă: Int, inDeg: Int, outDeg: Int) // Crearea unui utilizator Grafic val initialUserGraph: Grafic [Utilizator, Int] = grafic. mapVertices {case (id, (nume, vârstă)) => Utilizator (nume, vârstă, 0, 0)} // Completarea informațiilor despre grad val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Utilizator (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Utilizator (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} pentru ((id, proprietate)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Ieșirea pentru codul de mai sus este următoarea:

Utilizator unuse numeșteAliceși îi place2oameni. Utilizator 2se numeșteBobși îi place2oameni. Utilizator 3se numeșteCharlieși îi placeunuoameni. Utilizator 4se numeșteDavidși îi placeunuoameni. Utilizator 5se numeșteEdși îi place0oameni. Utilizator 6se numeșteFranși îi place2oameni.

Cei mai vechi adepți : Putem, de asemenea, să sortăm adepții după caracteristicile lor. Să găsim cei mai vechi adepți ai fiecărui utilizator după vârstă.

// Găsirea celui mai vechi urmăritor pentru fiecare utilizator val olderFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Pentru fiecare margine trimiteți un mesaj la vârful de destinație cu atributul sursei vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Pentru a combina mesajele luați mesajul pentru următorul mai vechi (a, b) => if (a. _2> b._2) a else b)

Ieșirea pentru codul de mai sus este următoarea:

Davideste cel mai vechi adept alAlice. Charlieeste cel mai vechi adept alBob. Edeste cel mai vechi adept alCharlie. Bobeste cel mai vechi adept alDavid. Ednu are adepți. Charlieeste cel mai vechi adept alFran. 

Utilizare: Analiza datelor de zbor folosind Spark GraphX

Acum că am înțeles conceptele de bază ale Spark GraphX, să rezolvăm o problemă din viața reală folosind GraphX. Acest lucru ne va oferi încrederea de a lucra la orice proiecte Spark în viitor.

Declarație problemă : Pentru a analiza datele de zbor în timp real utilizând Spark GraphX, furnizați rezultate de calcul aproape în timp real și vizualizați rezultatele folosind Google Data Studio.

Utilizare caz - Calcule de făcut :

  1. Calculați numărul total de rute de zbor
  2. Calculați și sortați cele mai lungi rute de zbor
  3. Afișați aeroportul cu cel mai înalt vârf
  4. Enumerați cele mai importante aeroporturi conform PageRank
  5. Enumerați rutele cu cele mai mici costuri de zbor

Vom folosi Spark GraphX ​​pentru calculele de mai sus și vom vizualiza rezultatele folosind Google Data Studio.

Utilizare caz - set de date :

Figura: Use Case - SUA Flight Dataset

Utilizați cazul - Diagrama fluxului :

Următoarea ilustrație explică în mod clar toți pașii implicați în analiza datelor de zbor.

Figura: Utilizare - Diagrama de flux a analizei datelor de zbor folosind Spark GraphX

Caz de utilizare - Implementarea scânteii :

Mergând mai departe, acum permiteți-ne să implementăm proiectul nostru folosind Eclipse IDE pentru Spark.

Găsiți mai jos codul Pseudo:

// Importul claselor necesare import org.apache.spark._ ... import java.io.File obiect aeroport {def main (args: Array [String]) {// Crearea unui Case Class Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Definirea unei funcții Parse String pentru a analiza intrarea în clasa Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (line (0), line (1), ..., line (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = nou SparkContext (conf) // Încărcați datele într-un RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analizați RDD-ul liniilor CSV într-un RDD al claselor de zbor val flightRDD = Map ParseFlight to Text RDD // Creați aeroporturi RDD cu ID și nume val aeroporturi = Map Flight OriginID și Origin airport.take (1) // Definirea unui vârf implicit numit nicăieri și maparea ID-ului aeroportului pentru printlns val nowhere = 'nicăieri' val airportMap = Utilizați funcția hartă .collect.toList.toMap // Creați rute RDD cu ID sursă, ID destinație și distanța rutelor val = flightRDD. Utilizați funcția hartă .distinct routes.take (2) // Creați margini RDD cu ID sursă, ID destinație și distanță val margini = routes.map {(Map OriginID și DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Definiți graficul și afișați câteva vârfuri și margini val graph = Graph (Aeroporturi, muchii și nicăieri) graph.vertices.take (2) graph.edges.take (2) // Interogare 1 - Găsiți numărul total de aeroporturi val numairports = Vertices Number // Interogare 2 - Calculați numărul total de rute? val numroutes = Număr de muchii // Interogarea 3 - Calculați acele rute cu distanțe mai mari de 1000 mile graph.edges.filter {Get the edge distance) => distance> 1000} .take (3) // În mod similar, scrieți Scala cod pentru interogări de mai jos // Interogarea 4 - Sortarea și tipărirea celor mai lungi rute // Interogarea 5 - Afișați vârfurile de cel mai înalt grad pentru zborurile de intrare și ieșire ale aeroporturilor // Interogarea 6 - Obțineți numele aeroportului cu ID-urile 10397 și 12478 // Interogarea 7 - Găsiți aeroport cu cele mai mari zboruri de intrare // Interogarea 8 - Găsiți aeroportul cu cele mai mari zboruri de ieșire // Interogarea 9 - Găsiți cele mai importante aeroporturi conform PageRank // Interogarea 10 - Sortați aeroporturile în funcție de clasare // Interogarea 11 - Afișați cel mai mult aeroporturi importante // Interogarea 12 - Găsiți rutele cu cele mai mici costuri de zbor // Interogarea 13 - Găsiți aeroporturile și cele mai mici costuri ale acestora // Interogarea 14 - Afișați codurile aeroportului împreună cu cele mai mici costuri de zbor sortate

Utilizare caz - Vizualizarea rezultatelor :

Vom folosi Google Data Studio pentru a vizualiza analiza noastră. Google Data Studio este un produs din Google Analytics 360 Suite. Vom folosi serviciul Geo Map pentru a mapa aeroporturile în locațiile lor respective pe harta SUA și pentru a afișa cantitatea de valori.

  1. Afișați numărul total de zboruri pe aeroport
  2. Afișați suma metrică a rutelor de destinație de la fiecare aeroport
  3. Afișați întârzierea totală a tuturor zborurilor pe aeroport

Acum, aceasta încheie blogul Spark GraphX. Sper că ți-a plăcut să-l citești și l-ai găsit informativ. Consultați următorul blog din seria noastră Apache Spark pentru a deveni gata de piață în Apache Spark.

analizați șirul până la data java

Vă recomandăm următoarele Apache Spark Training | Video despre analiza datelor de zbor de la Edureka pentru a începe cu:

Apache Spark Training | Analiza datelor de zbor Spark GraphX ​​| Edureka

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom contacta cel mai devreme.

Dacă doriți să învățați Spark și să construiți o carieră în domeniul Spark și să vă dezvoltați expertiza pentru a efectua prelucrări de date la scară largă utilizând RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​și Scala cu cazuri de utilizare din viața reală, consultați interactivele noastre, live -pe net Aici, care vine cu suport 24 * 7 pentru a vă ghida pe toată perioada de învățare.