Spark GraphX ​​Tutorial - Grafanalyse i Apache Spark



Denne GraphX ​​opplæringsbloggen vil introdusere deg for Apache Spark GraphX, dens funksjoner og komponenter, inkludert et flydataanalyseprosjekt.

GraphX er Apache Sparks API for grafer og graf-parallell beregning. GraphX ​​forener ETL (Extract, Transform & Load) prosess, utforskende analyse og iterativ grafberegning i et enkelt system. Bruken av grafer kan sees i Facebooks venner, LinkedIn-tilkoblinger, internettets rutere, forholdet mellom galakser og stjerner i astrofysikk og Googles Maps. Selv om begrepet grafberegning ser ut til å være veldig enkelt, er bruken av grafer bokstavelig talt ubegrenset med brukstilfeller innen katastrofedeteksjon, bank, aksjemarked, bank og geografiske systemer for bare å nevne noen.Å lære bruk av dette API er en viktig del av .Gjennom denne bloggen vil vi lære konseptene til Spark GraphX, dens funksjoner og komponenter gjennom eksempler og gå gjennom en fullstendig brukssak av Flight Data Analytics ved hjelp av GraphX.

Vi vil dekke følgende emner i denne Spark GraphX-bloggen:





  1. Hva er grafer?
  2. Bruk tilfeller av grafberegning
  3. Hva er Spark GraphX?
  4. Spark GraphX-funksjoner
  5. Forstå GraphX ​​med eksempler
  6. Bruk sak - Flydataanalyse ved bruk av GraphX

Hva er grafer?

En graf er en matematisk struktur som tilsvarer et sett med objekter der noen par av objektene er relatert i noen forstand. Disse relasjonene kan vises med kanter og hjørner som danner en graf. Hjørnepunktene representerer objektene, og kantene viser de forskjellige forholdene mellom disse objektene.

Graph Concepts - Spark GraphX ​​Tutorial - EdurekaFigur: Spark GraphX ​​Tutorial - Vertices, edge and triplets in charts



I datavitenskap er en graf en abstrakt datatype som er ment å implementere den ikke-rettede grafen og styrte grafkonsepter fra matematikk, spesielt feltet teori. En graf datastruktur kan også knytte til hver kant noen kantverdi , for eksempel en symbolsk etikett eller et numerisk attributt (kostnad, kapasitet, lengde,etc.).

rund dobbelt til int java

Bruk tilfeller av grafberegning

Følgende brukssaker gir perspektiv på grafberegning og videre muligheter for å implementere andre løsninger ved hjelp av grafer.

  1. System for oppdagelse av katastrofer

    Grafer kan brukes til å oppdage katastrofer som orkaner, jordskjelv, tsunami, skogbranner og vulkaner for å gi advarsler for å varsle mennesker.



  2. Side rangering Page Rank kan brukes til å finne influencers i et hvilket som helst nettverk, for eksempel papirkursnettverk eller sosiale medier.
  3. Deteksjon av økonomisk svindel

    Grafanalyse kan brukes til å overvåke økonomiske transaksjoner og oppdage personer som er involvert i økonomisk svindel og hvitvasking av penger.

  4. Forretningsanalyse

    Grafer, når de brukes sammen med maskinlæring, hjelper til med å forstå kundens kjøpstrender. F.eks. Uber, McDonald’s osv.

  5. Geografiske informasjonssystemer

    Grafer brukes intenst til å utvikle funksjoner på geografiske informasjonssystemer som avgrensning av vannskille og værforutsigelse.

  6. Google Pregel

    Pregel er Googles skalerbare og feiltolerante plattform med en API som er tilstrekkelig fleksibel til å uttrykke vilkårlig grafalgoritmer.

Hva er Spark GraphX?

GraphX er Spark API for grafer og graf-parallell beregning. Den inkluderer en økende samling av grafalgoritmer og byggere for å forenkle grafanalyseoppgaver.


GraphX ​​utvider Spark RDD med en elastisk distribuert eiendomsgraf.
Eiendomsgrafen er en rettet multigraf som kan ha flere kanter parallelt. Hver kant og toppunkt har brukerdefinerte egenskaper knyttet til den. De parallelle kantene tillater flereforhold mellom de samme hjørnene.

Spark GraphX-funksjoner

Følgende er funksjonene til Spark GraphX:

  1. Fleksibilitet :
    Spark GraphX ​​fungerer med både grafer og beregninger. GraphX ​​forener ETL (Extract, Transform & Load), utforskende analyse og iterativ grafberegning i et enkelt system. Vi kan se de samme dataene som både grafer og samlinger, transformere og bli med grafer med RDDer effektivt og skrive tilpassede iterative grafalgoritmer ved hjelp av Pregel API.
  2. Hastighet :
    Spark GraphX ​​gir sammenlignbar ytelse med de raskeste spesialiserte grafbehandlingssystemene. Det er sammenlignbart med de raskeste grafsystemene, samtidig som Sparks fleksibilitet, feiltoleranse og brukervennlighet bevares.
  3. Voksende algoritmebibliotek :
    Vi kan velge mellom et voksende bibliotek med grafalgoritmer som Spark GraphX ​​har å tilby. Noen av de populære algoritmene er siderangering, tilkoblede komponenter, etikettutbredelse, SVD ++, sterkt koblede komponenter ogtrekanttelling.

Forstå GraphX ​​med eksempler

Vi vil nå forstå konseptene til Spark GraphX ​​ved hjelp av et eksempel. La oss vurdere en enkel graf som vist på bildet nedenfor.

Figur: Spark GraphX ​​Tutorial - Grafeksempel

Når vi ser på grafen, kan vi trekke ut informasjon om menneskene (hjørner) og forholdet mellom dem (kanter). Grafen representerer Twitter-brukerne og hvem de følger på Twitter. For f.eks. Bob følger Davide og Alice på Twitter.

La oss implementere det samme ved hjelp av Apache Spark. Først vil vi importere de nødvendige klassene for GraphX.

// Importere de nødvendige klassene 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

Viser hjørner :Videre vil vi nå vise alle brukernes navn og alder (hjørner).

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

Utgangen for ovennevnte kode er som nedenfor:

Davider42 Franerfemti Eder55 Charlieer65

Viser kanter : La oss se på hvilken person som liker hvem på Twitter.

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

Utgangen for ovennevnte kode er som nedenfor:

BoblikerAlice BoblikerDavid CharlielikerBob CharlielikerFran DavidlikerAlice EdlikerBob EdlikerCharlie EdlikerFran

Nå som vi har forstått det grunnleggende i GraphX, la oss dykke litt dypere og utføre noen avanserte beregninger på det samme.

Antall følgere : Hver bruker i grafen vår har et annet antall følgere. La oss se på alle følgere for hver bruker.

// Definere en klasse for å tydeligere modell for brukeregenskapens saksklasse User (navn: String, age: Int, inDeg: Int, outDeg: Int) // Opprette en bruker Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Fyll ut gradinformasjonen val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Bruker (u.navn, u.alder, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => User (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} for ((id, eiendom)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Utgangen for ovennevnte kode er som nedenfor:

Bruker ener kaltAliceog er likt av2mennesker. Bruker 2er kaltBobog er likt av2mennesker. Bruker 3er kaltCharlieog er likt avenmennesker. Bruker 4er kaltDavidog er likt avenmennesker. Bruker 5er kaltEdog er likt av0mennesker. Bruker 6er kaltFranog er likt av2mennesker.

Eldste følgere : Vi kan også sortere følgere etter deres egenskaper. La oss finne de eldste tilhengerne av hver bruker etter alder.

// Finne den eldste følgeren for hver bruker, val elderFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// For hver kant send en melding til destinasjonspunktet med attributtet til kilden toppunktkant => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // For å kombinere meldinger ta meldingen for den eldre følgeren (a, b) => hvis (a. _2> b._2) en annen b)

Utgangen for ovennevnte kode er som nedenfor:

Davider den eldste tilhengeren avAlice. Charlieer den eldste tilhengeren avBob. Eder den eldste tilhengeren avCharlie. Bober den eldste tilhengeren avDavid. Edhar ingen følgere. Charlieer den eldste tilhengeren avFran. 

Brukssak: Flydataanalyse ved bruk av Spark GraphX

Nå som vi har forstått kjernekonseptene i Spark GraphX, la oss løse et virkelig problem ved hjelp av GraphX. Dette vil bidra til å gi oss tillit til å jobbe med eventuelle Spark-prosjekter i fremtiden.

Problemstilling : For å analysere sanntidsdata ved hjelp av Spark GraphX, gi nær beregningsresultater i sanntid og visualiser resultatene ved hjelp av Google Data Studio.

Bruk sak - beregninger som skal gjøres :

  1. Beregn det totale antallet flyruter
  2. Beregn og sorter de lengste flyrutene
  3. Vis flyplassen med toppunktet i høyeste grad
  4. Liste over de viktigste flyplassene i henhold til PageRank
  5. List opp rutene med de laveste flykostnadene

Vi vil bruke Spark GraphX ​​for beregningene ovenfor og visualisere resultatene ved hjelp av Google Data Studio.

modellvisning kontrollereksempel java

Bruk sak - datasett :

Figur: Bruk sak - USAs flydatasett

Bruk sak - flytdiagram :

Illustrasjonen nedenfor forklarer tydelig alle trinnene som er involvert i vår flydataanalyse.

Figur: Bruk sak - flytskjema for flydataanalyse ved hjelp av Spark GraphX

Bruk sak - gnistimplementering :

La oss nå implementere prosjektet vårt ved hjelp av Eclipse IDE for Spark.

Finn Pseudo-koden nedenfor:

// Importere de nødvendige klassene import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Opprette en Case Class Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Definere en Parse String-funksjon for å analysere inngang i Flight class def parseFlight (str: String): Flight = {val line = str.split (',') Flight (linje (0), linje (1), ..., linje (16) .toInt)} val conf = ny SparkConf (). setAppName ('flyplass'). setMaster ('lokal [2]') val sc = ny SparkContext (conf) // Last inn dataene i en RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analiser RDD av CSV-linjer i en RDD av flyklasser val FlightsRDD = Map ParseFlight to Text RDD // Opprett flyplasser RDD med ID og navn val lufthavnene = Kart Flight OriginID og Origin lufthavnene. ta (1) // Definere et standard toppunkt kalt ingensteds og kartlegge flyplass-ID for printlns val ingensteds = 'ingensteds' val airportMap = Bruk kartfunksjon .collect.toList.toMap // Opprett ruter RDD med kilde-ID, destinasjons-ID og avstandsveieruter = flightRDD. Bruk kartfunksjon .distinct routes.take (2) // Opprett kanter RDD med sourceID, destinasjonsID og avstandsvalskanter = routes.map {(Map OriginID og DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Definer grafen og vis noen hjørner og kanter val graph = Graph (Airports, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Finn det totale antallet flyplasser val numairports = Vertices Number // Query 2 - Calculate the total number of routes? val numroutes = Antall kanter // Spørsmål 3 - Beregn de rutene med avstander mer enn 1000 miles graph.edges.filter {Få kantavstand) => avstand> 1000}. ta (3) // Skriv på samme måte Scala-kode for under spørsmål // Spørsmål 4 - Sorter og skriv ut de lengste rutene // Spørring 5 - Vis høyeste grad av toppunkt for innkommende og utgående flyreiser til flyplasser // Spørsmål 6 - Få navnet på flyplassen med ID 10397 og 12478 // Spørring 7 - Finn flyplass med høyest innkommende fly // Spørsmål 8 - Finn flyplassen med høyest utgående fly // Spørsmål 9 - Finn de viktigste flyplassene i henhold til PageRank // Spørring 10 - Sorter flyplassene etter rangering // Spørsmål 11 - Vis mest viktige flyplasser // Spørsmål 12 - Finn rutene med de laveste flykostnadene // Spørsmål 13 - Finn flyplasser og de laveste flykostnadene // Spørsmål 14 - Vis flyplasskoder sammen med sorterte laveste flykostnader

Bruk sak - visualisere resultater :

Vi bruker Google Data Studio for å visualisere analysen vår. Google Data Studio er et produkt under Google Analytics 360 Suite. Vi vil bruke Geo Map-tjenesten til å kartlegge flyplassene på deres respektive steder på USA-kartet og vise beregningsantallet.

  1. Vis det totale antall flyreiser per flyplass
  2. Vis metrisk sum av destinasjonsruter fra alle flyplasser
  3. Vis total forsinkelse for alle flyreiser per flyplass

Nå avslutter dette Spark GraphX-bloggen. Jeg håper du likte å lese den og syntes den var informativ. Ta en titt på neste blogg i vår Apache Spark-serie på for å bli markedsklar i Apache Spark.

Vi anbefaler følgende Apache Spark Training | Flydataanalysevideo fra Edureka til å begynne med:

Apache Spark Training | Spark GraphX ​​Flight Data Analysis | Edureka

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet, så vil vi snarest komme tilbake til deg.

løft et tall til en makt i java

Hvis du ønsker å lære Spark og bygge en karriere innen Spark-domenet og bygge ekspertise for å utføre databehandling i stor skala ved hjelp av RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​og Scala med bruk i Real Life, sjekk ut våre interaktive, live -på nett her, som kommer med 24 * 7 støtte for å veilede deg gjennom hele læringsperioden.