Vadnica Spark GraphX ​​- Grafična analiza v Apache Spark



Ta blog Vadnice za GraphX ​​vas bo seznanil z Apache Spark GraphX, njegovimi funkcijami in komponentami, vključno s projektom analize podatkov o letih.

GraphX je API Apache Spark za grafe in grafično vzporedne izračune. GraphX ​​združuje postopek ETL (Extract, Transform & Load), raziskovalno analizo in iterativno izračun grafov v enem samem sistemu. Uporabo grafov lahko vidimo pri Facebookovih prijateljih, povezavah LinkedIna, internetnih usmerjevalnikih, odnosih med galaksijami in zvezdami v astrofiziki in Googlovih zemljevidih. Čeprav se zdi, da je koncept izračunavanja grafov zelo preprost, je uporaba grafov dobesedno neomejena s primeri uporabe pri odkrivanju nesreč, bančništvu, borzi, bančnem in geografskem sistemu, če naštejemo le nekatere.Učenje uporabe tega API je pomemben del .Preko tega spletnega dnevnika bomo s primeri spoznali koncepte Spark GraphX, njegove značilnosti in komponente ter si ogledali celoten primer uporabe Flight Data Analytics z uporabo GraphX-a.

V tem blogu Spark GraphX ​​bomo obravnavali naslednje teme:





  1. Kaj so grafi?
  2. Uporabite primere grafičnega računanja
  3. Kaj je Spark GraphX?
  4. Značilnosti Spark GraphX
  5. Razumevanje GraphX-a s primeri
  6. Primer uporabe - Analiza podatkov o letu z uporabo GraphX

Kaj so grafi?

Graf je matematična struktura, ki obsega nabor predmetov, v katerih so nekateri pari predmetov v nekem smislu povezani. Te relacije lahko predstavimo z robovi in ​​točki, ki tvorijo graf. Točke predstavljajo predmete, robovi pa prikazujejo različna razmerja med njimi.

Grafični koncepti - Vadnica za Spark GraphX ​​- EdurekaSlika: Vadnica Spark GraphX ​​- Točke, robovi in ​​trojčki v grafih



V računalništvu je graf abstraktna podatkovna vrsta, ki je namenjena izvajanju usmerjenega grafa in usmerjenih konceptov grafov iz matematike, zlasti področja teorije grafov. Graf podatkovnih struktur se lahko pridruži tudi vsakemu robu robna vrednost , kot so simbolična nalepka ali številčni atribut (stroški, zmogljivost, dolžina,itd.).

Uporabite primere grafičnega računanja

Naslednji primeri uporabe dajejo vpogled v izračun grafov in nadaljnji obseg izvajanja drugih rešitev z uporabo grafov.

  1. Sistem za odkrivanje nesreč

    Grafi se lahko uporabljajo za odkrivanje nesreč, kot so orkani, potresi, cunami, gozdni požari in vulkani, da se opozorila opozorijo ljudi.



  2. Page Rank Page Rank lahko uporabimo pri iskanju vplivnežev v katerem koli omrežju, kot je omrežje za citiranje papirja ali omrežje socialnih medijev.
  3. Odkrivanje finančnih goljufij

    Analiza grafov se lahko uporablja za spremljanje finančnih transakcij in odkrivanje ljudi, vpletenih v finančne prevare in pranje denarja.

  4. Analiza poslovanja

    Grafi, ki se uporabljajo skupaj s strojnim učenjem, pomagajo razumeti trende nakupa strank. Npr. Uber, McDonald’s itd.

  5. Geografski informacijski sistemi

    Grafi se intenzivno uporabljajo za razvoj funkcionalnosti geografskih informacijskih sistemov, kot sta razmejitev razvodja in vremenska napoved.

  6. Google Pregel

    Pregel je Googlova razširljiva in odporna platforma z API-jem, ki je dovolj prilagodljiv za izražanje poljubnega grafaalgoritmi.

Kaj je Spark GraphX?

GraphX je API Spark za grafe in vzporedno izračunavanje grafov. Vključuje naraščajočo zbirko grafičnih algoritmov in graditeljev za poenostavitev nalog analitike grafov.


GraphX ​​razširja RDD Spark z elastičnim grafom porazdeljenih lastnosti.
Graf lastnosti je usmerjeni multigraf, ki ima lahko več robov vzporedno. Z vsakim robom in ogliščem so povezane uporabniško določene lastnosti. Vzporedni robovi omogočajo večkratnorazmerja med enakimi točkami.

Značilnosti Spark GraphX

Spark GraphX ​​vsebuje naslednje lastnosti:

  1. Prilagodljivost :
    Spark GraphX ​​deluje tako z grafi kot z izračuni. GraphX ​​v enem sistemu združuje ETL (Extract, Transform & Load), raziskovalno analizo in iterativno izračunavanje grafov. Lahko si ogledamo enake podatke kot grafe in zbirke, učinkovito transformiramo in združimo grafe z RDD-ji ter z API-jem Pregel vpišemo algoritme ponavljajočih se grafikov po meri.
  2. Hitrost :
    Spark GraphX ​​zagotavlja primerljivo zmogljivost s najhitrejšimi specializiranimi sistemi za obdelavo grafov. Primerljiv je z najhitrejšimi grafičnimi sistemi, hkrati pa ohranja fleksibilnost, odpornost na napake in enostavnost uporabe.
  3. Rastoča knjižnica algoritmov :
    Izbiramo lahko med naraščajočo knjižnico grafičnih algoritmov, ki jih ponuja Spark GraphX. Nekateri priljubljeni algoritmi so uvrstitev strani, povezane komponente, razširjanje nalepk, SVD ++, močno povezane komponente inštetje trikotnikov.

Razumevanje GraphX-a s primeri

Zdaj bomo koncepte Spark GraphX ​​razumeli na primeru. Upoštevajmo preprost graf, kot je prikazano na spodnji sliki.

Slika: Vadnica za Spark GraphX ​​- primer grafa

Če pogledamo graf, lahko pridobimo informacije o ljudeh (oglišča) in odnosih med njimi (robovi). Graf tukaj predstavlja uporabnike Twitterja in osebe, ki jim sledijo na Twitterju. Za npr. Bob spremlja Davideja in Alice na Twitterju.

Izvedimo enako z uporabo Apache Spark. Najprej bomo uvozili potrebne razrede za GraphX.

python kaj je __init__
// Uvoz potrebnih razredov 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

Prikaz vrhov :Nadalje bomo zdaj prikazali vsa imena in starosti uporabnikov (oglišča).

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

Izhod za zgornjo kodo je spodaj:

Davidje42 Franjepetdeset Edje55 Charlieje65

Prikaz robov : Poglejmo, katera oseba je komu všeč na Twitterju.

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

Izhod za zgornjo kodo je spodaj:

BobvšečkiAlice BobvšečkiDavid CharlievšečkiBob CharlievšečkiFran DavidvšečkiAlice EdvšečkiBob EdvšečkiCharlie EdvšečkiFran

Zdaj, ko smo razumeli osnove GraphX-a, se potopimo nekoliko globlje in opravimo nekaj naprednih izračunov na istem.

Število sledilcev : Vsak uporabnik na našem grafu ima različno število sledilcev. Oglejmo si vse sledilce za vsakega uporabnika.

// Določanje razreda za jasnejše modeliranje razreda uporabniške lastnosti uporabnika (ime: String, starost: Int, inDeg: Int, outDeg: Int) // Ustvarjanje uporabniškega grafa val InitiUserGraph: graf [uporabnik, int] = graf. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Izpolnjevanje podatkov o stopnji val userGraph = začetniUserGraph.outerJoinVertices (začetniUserGraph.inDegrees) {case (id, u, inDegOpt) => Uporabnik (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (začetniUserGraph.outDegrees) {case (id, u, outDegOpt) => Uporabnik (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} za ((id, lastnost)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Izhod za zgornjo kodo je spodaj:

Uporabnik enoje poklicanAlicein je všeč2.ljudi. Uporabnik 2.je poklicanBobin je všeč2.ljudi. Uporabnik 3.je poklicanCharliein je všečenoljudi. Uporabnik 4.je poklicanDavidin je všečenoljudi. Uporabnik 5.je poklicanEdin je všeč0ljudi. Uporabnik 6.je poklicanFranin je všeč2.ljudi.

Najstarejši sledilci : Sledilce lahko razvrstimo tudi po njihovih značilnostih. Poiščimo najstarejše sledilce vsakega uporabnika po starosti.

// Iskanje najstarejšega sledilca za vsakega uporabnika val najstarejšiFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Za vsak rob pošljite sporočilo v ciljno točko z atributom vira vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age)))), // Za kombiniranje sporočil vzemite sporočilo za starejšega sledilca (a, b) => if (a. _2> b._2) še b)

Izhod za zgornjo kodo je spodaj:

Davidje najstarejši privrženecAlice. Charlieje najstarejši privrženecBob. Edje najstarejši privrženecCharlie. Bobje najstarejši privrženecDavid. Ednima sledilcev. Charlieje najstarejši privrženecFran. 

Primer uporabe: Analiza podatkov o letu s pomočjo Spark GraphX

Zdaj, ko smo razumeli bistvene koncepte Spark GraphX, rešimo resničen problem z uporabo GraphX-a. To nam bo pomagalo, da bomo lahko v prihodnosti delali na katerem koli projektu Spark.

Izjava o težavi : Če želite analizirati podatke o poletih v realnem času s pomočjo Spark GraphX, zagotovite rezultate izračuna v skoraj realnem času in vizualizirajte rezultate z Google Data Studio.

Primer uporabe - Izračuni, ki jih je treba opraviti :

  1. Izračunajte skupno število letalskih poti
  2. Izračunajte in razvrstite najdaljše letalske poti
  3. Prikažite letališče z najvišjo točko
  4. Naštejte najpomembnejša letališča glede na PageRank
  5. Naštejte poti z najnižjimi stroški leta

Za zgornje izračune bomo uporabili Spark GraphX ​​in rezultate prikazali z Google Data Studio.

Primer uporabe - nabor podatkov :

Slika: Primer uporabe - ZDA Flight Dataset

Primer uporabe - diagram poteka :

Naslednja ilustracija jasno razlaga vse korake, ki so vključeni v našo analizo podatkov o letih.

Slika: Primer uporabe - diagram poteka analize podatkov o letu s pomočjo Spark GraphX

Primer uporabe - implementacija iskre :

Ko gremo naprej, zdaj izvedimo svoj projekt z uporabo Eclipse IDE za Spark.

Poiščite psevdo kodo spodaj:

// Uvoz potrebnih razredov import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Ustvarjanje Case Class Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Določanje funkcije Parse String za razčlenitev vnosa v razred Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (vrstica (0), vrstica (1), ..., vrstica (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = new SparkContext (conf) // Naloži podatke v RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Razčleni RDD vrstic CSV v RDD letalskih razredov val flightRDD = Zemljevid ParseFlight v besedilo RDD // Ustvari letališča RDD z ID in imenom val airports = Map Flight OriginID in Origin airports.take (1) // Določitev privzete točke, imenovane nikjer, in preslikava ID letališča za printlns val nowhere = 'nowhere' val airportMap = Uporabi funkcijo zemljevida .collect.toList.toMap // Ustvari RDD poti z izvornimi ID, ciljnimi ID in razdaljami val val = flightRDD. Uporabite funkcijo zemljevida .distinct routes.take (2) // Ustvari RDD robov z sourceID, destinationID in razdaljo val edge = routes.map {(Map OriginID in DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Določite graf in prikažite nekaj točk in robov val graph = Graf (Letališča, robovi in ​​nikjer) graph.vertices.take (2) graph.edges.take (2) // Poizvedba 1 - Najdi skupno število letališč val numairports = Število vozlišč // Poizvedba 2 - Izračunajte skupno število poti? val numroutes = Število robov // Poizvedba 3 - Izračunajte tiste poti z razdaljo večjo od 1000 milj graph.edges.filter {Pridobite razdaljo do roba) => razdalja> 1000} .take (3) // Podobno napišite kodo Scala za spodaj poizvedbe // Poizvedba 4 - Razvrščanje in tiskanje najdaljših poti // Poizvedba 5 - Prikaži najvišje stopinje za dohodne in odhodne lete letališč // Poizvedba 6 - Pridobite ime letališča z ID-jema 10397 in 12478 // Poizvedba 7 - Poiščite letališče z največ dohodnimi leti // Poizvedba 8 - Poiščite letališče z največ odhodnimi leti // Poizvedba 9 - Poiščite najpomembnejša letališča glede na PageRank // Poizvedba 10 - Razvrstite letališča po uvrstitvi // Poizvedba 11 - Prikažite največ pomembna letališča // Poizvedba 12 - Poiščite poti z najnižjimi stroški leta // Poizvedba 13 - Poiščite letališča in njihove najnižje stroške leta // Poizvedba 14 - Prikažite letališke kode skupaj z razvrščenimi najnižjimi stroški leta

Primer uporabe - vizualizacija rezultatov :

Za vizualizacijo naše analize bomo uporabili Google Data Studio. Google Data Studio je izdelek v zbirki Google Analytics 360 Suite. Storitev Geo Map bomo uporabili za kartiranje letališč na njihovih lokacijah na zemljevidu ZDA in prikaz količine meritev.

  1. Prikažite skupno število letov na letališče
  2. Prikažite metrični vsoto ciljnih poti z vsakega letališča
  3. Prikaz skupne zamude vseh letov na letališče

Zdaj se s tem zaključuje blog Spark GraphX. Upam, da ste ga z veseljem brali in se vam zdel informativen. Oglejte si naslednji spletni dnevnik naše serije Apache Spark postati pripravljen na trg v Apache Spark.

Priporočamo naslednje Izobraževanje Apache Spark | Video o analizi podatkov o letih iz Edureke za začetek:

Izobraževanje Apache Spark | Analiza podatkov o letu Spark GraphX ​​| Edureka

Imate vprašanje za nas? Prosimo, navedite to v oddelku za komentarje in prej se vam bomo oglasili.

Če se želite naučiti Sparka in si ustvariti kariero na področju Sparka ter pridobiti strokovno znanje za izvajanje obsežne obdelave podatkov z uporabo RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​in Scala z resničnimi primeri uporabe, si oglejte naš interaktivni v živo -online tukaj, prihaja s podporo 24 * 7, ki vas vodi skozi celotno obdobje učenja.