Spark GraphXi õpetus - graafikaanalüüs Apache Sparkis



See GraphXi õpetuse ajaveeb tutvustab teile Apache Spark GraphX-i, selle funktsioone ja komponente, sealhulgas lennuandmete analüüsi projekti.

GraafikX on Apache Sparki graafikute ja graafidega paralleelarvutuste API. GraphX ​​ühendab ETL (Extract, Transform & Load) protsessi, uurimisanalüüsi ja iteratiivse graafide arvutamise ühes süsteemis. Graafikute kasutamist näevad Facebooki sõbrad, LinkedIni ühendused, Interneti ruuterid, astrofüüsika galaktikate ja tähtede suhted ning Google'i Maps. Ehkki graafide arvutamise mõiste näib olevat väga lihtne, on graafikute rakendused sõna otseses mõttes piiramatud, kui kasutada vaid katastroofide avastamise, panganduse, aktsiaturu, panganduse ja geograafiliste süsteemide juhtumeid.Selle API kasutamise õppimine on programmi oluline osa .Selle ajaveebi kaudu õpime näidete abil Spark GraphXi mõisteid, selle funktsioone ja komponente ning läbime GraphX-i abil Flight Data Analyticsi täieliku kasutamise juhtumi.

Käsitleme selles Spark GraphX ​​blogis järgmisi teemasid:





  1. Mis on graafikud?
  2. Kasutage graafide arvutamise juhtumeid
  3. Mis on Spark GraphX?
  4. Spark GraphX ​​funktsioonid
  5. GraphX-i mõistmine näidetega
  6. Kasuta juhtumit - lennuandmete analüüs, kasutades GraphX-i

Mis on graafikud?

Graaf on matemaatiline struktuur, mis moodustab objektide kogumi, milles mõned objektide paarid on mõnes mõttes omavahel seotud. Neid seoseid saab kujutada graafi moodustavate servade ja tippude abil. Tipud tähistavad objekte ja servad näitavad mitmesuguseid seoseid nende objektide vahel.

Graafiku kontseptsioonid - Spark GraphXi õpetus - EdurekaJoonis: Spark GraphXi õpetus - graafikute tipud, servad ja kolmikud



Arvutiteaduses on graaf abstraktne andmetüüp, mis on ette nähtud matemaatika suunamata graafi ja suunatud graafikontseptsioonide, täpsemalt graafiteooria valdkonna, rakendamiseks. Graafi andmete struktuur võib seostada ka iga servaga servaväärtus , näiteks sümboolne silt või numbriline atribuut (maksumus, maht, pikkus,jne.).

Kasutage graafide arvutamise juhtumeid

Järgnevad kasutusjuhtumid annavad graafiku arvutamise perspektiivi ja täiendava võimaluse teiste graafide abil lahenduste rakendamiseks.

  1. Katastroofide avastamise süsteem

    Graafikute abil saab tuvastada selliseid katastroofe nagu orkaanid, maavärinad, tsunami, metsatulekahjud ja vulkaanid, et anda inimestele hoiatusi.



  2. Page Rank Page Rank'i saab kasutada mõjutajate leidmiseks mis tahes võrgustikus, näiteks paberviidete võrgus või sotsiaalmeedia võrgus.
  3. Finantspettuste tuvastamine

    Graafilist analüüsi saab kasutada finantstehingute jälgimiseks ning finantspettuste ja rahapesuga seotud inimeste avastamiseks.

  4. Äri analüüs

    Graafikud, kui neid kasutatakse koos masinõppega, aitavad mõista klientide ostutrende. Nt Uber, McDonald’s jne.

  5. Geograafilised infosüsteemid

    Graafikuid kasutatakse intensiivselt geograafiliste infosüsteemide funktsionaalsuste arendamiseks, näiteks valgala piiritlemine ja ilmaennustus.

  6. Google Pregel

    Pregel on Google'i skaleeritav ja tõrketaluv platvorm, millel on API, mis on meelevaldse graafi väljendamiseks piisavalt paindlikalgoritmid.

Mis on Spark GraphX?

GraafikX on Sparki API graafikute ja graafidega paralleelsete arvutuste jaoks. See hõlmab graafikute analüüsiülesannete lihtsustamiseks kasvavat graafikute algoritmide ja ehitajate kogu.


GraphX ​​laiendab Spark RDD-d elastse hajutatud omaduste graafikuga.
Omaduste graafik on suunatud multigraaf, millel võib olla mitu paralleelset serva. Igal serval ja tipul on sellega seotud kasutaja määratletud omadused. Paralleelsed servad võimaldavad mitutsamade tippude vahelised suhted.

Spark GraphX ​​funktsioonid

Spark GraphX-i funktsioonid on järgmised:

  1. Paindlikkus :
    Spark GraphX ​​töötab nii graafikute kui ka arvutustega. GraphX ​​ühendab ETL-i (ekstrakt, teisendus ja laadimine), uurimusanalüüsi ja iteratiivse graafide arvutamise ühes süsteemis. Saame vaadata nii graafikute kui ka kollektsioonidega samu andmeid, tõhusalt teisendada ja liita graafikuid RDD-dega ning kirjutada kohandatud iteratiivseid graafide algoritme, kasutades Pregeli API-d.
  2. Kiirus :
    Spark GraphX ​​pakub võrreldavat jõudlust kiireimate spetsialiseeritud graafide töötlemise süsteemidega. See on võrreldav kiireimate graafikute süsteemidega, säilitades samas Sparki paindlikkuse, rikketaluvuse ja kasutusmugavuse.
  3. Kasvav algoritmide raamatukogu :
    Saame valida kasvava graafi algoritmide kogu vahel, mida Spark GraphX ​​pakub. Mõned populaarsed algoritmid on lehe järjestus, ühendatud komponendid, siltide levik, SVD ++, tugevalt ühendatud komponendid jakolmnurkade arv.

GraphX-i mõistmine näidetega

Mõistame nüüd näite abil Spark GraphXi mõisteid. Vaatleme lihtsat graafikut, nagu on näidatud alloleval pildil.

Joonis: Spark GraphXi õpetus - graafiku näide

Graafikut vaadates saame teavet inimeste (tippude) ja nendevaheliste suhete (servade) kohta. Siin olev graafik tähistab Twitteri kasutajaid ja keda nad Twitteris jälgivad. Näiteks Bob jälgib Twitteris Davide'i ja Alice'i.

Rakendame sama Apache Sparki abil. Esiteks impordime GraphX-i jaoks vajalikud klassid.

// Vajalike klasside importimine 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

Tippude kuvamine :Edasi kuvame nüüd kõigi kasutajate nimed ja vanused (tipud).

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

Ülaltoodud koodi väljund on järgmine:

Davidon42 Franonviiskümmend Edon55 Charlieon65

Servade kuvamine : Vaatame Twitteris, kes inimesele kellele meeldib.

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

Ülaltoodud koodi väljund on järgmine:

BobmeeldibAlice BobmeeldibDavid CharliemeeldibBob CharliemeeldibFran DavidmeeldibAlice EdmeeldibBob EdmeeldibCharlie EdmeeldibFran

Nüüd, kui oleme GraphXi põhitõdedest aru saanud, sukeldugem veidi sügavamale ja tehke samal viisil mõned täpsemad arvutused.

Jälgijate arv : Igal meie graafiku kasutajal on erinev arv jälgijaid. Vaatame iga kasutaja kõiki jälgijaid.

java kaugmeetodi kutsumise näide
// Klassi määratlemine kasutaja atribuutide klassi selgemaks modelleerimiseks Kasutaja (nimi: String, vanus: Int, inDeg: Int, outDeg: Int) // Kasutajagraafiku loomine val initialUserGraph: Graafik [Kasutaja, Int] = graafik. mapVertices {juhtum (id, (nimi, vanus)) => Kasutaja (nimi, vanus, 0, 0)} // Kraaditeabe täitmine val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Kasutaja (u.nimi, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Kasutaja (u.nimi, u.age, u.inDeg, outDegOpt.getOrElse (0))} for ((id, atribuut)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Ülaltoodud koodi väljund on järgmine:

Kasutaja ükskutsutakseAliceja meeldib2inimesed. Kasutaja 2kutsutakseBobja meeldib2inimesed. Kasutaja 3kutsutakseCharlieja meeldibüksinimesed. Kasutaja 4kutsutakseDavidja meeldibüksinimesed. Kasutaja 5kutsutakseEdja meeldib0inimesed. Kasutaja 6kutsutakseFranja meeldib2inimesed.

Vanimad jälgijad : Samuti võime järgijaid sortida nende omaduste järgi. Leidkem iga kasutaja vanimad jälgijad vanuse järgi.

// Vanima jälgija leidmine igale kasutajale val vanhimFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Iga serva kohta saatke sihtkohatippu sõnum koos allika atribuudiga tipu serv => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Sõnumite kombineerimiseks võtke teade vanemale jälgijale (a, b) => if (a. _2> b._2) a teine ​​b)

Ülaltoodud koodi väljund on järgmine:

Davidon vanim järgijaAlice. Charlieon vanim järgijaBob. Edon vanim järgijaCharlie. Bobon vanim järgijaDavid. Edpole ühtegi jälgijat. Charlieon vanim järgijaFran. 

Kasutamise juhtum: lennuandmete analüüs, kasutades Spark GraphX-i

Nüüd, kui oleme Spark GraphXi põhimõistetest aru saanud, lahendage GraphX ​​abil reaalse elu probleem. See aitab meil enesekindlust tulevikus Sparki projektidega töötada.

Probleemipüstituses : Reaalajas lendude andmete analüüsimiseks Spark GraphX-i abil saate pakkuda peaaegu reaalajas arvutustulemusi ja visualiseerida tulemusi Google Data Studio abil.

Kasuta juhtumit - arvutused tuleb teha :

  1. Arvutage lennuliinide koguarv
  2. Arvutage ja sorteerige pikimad lennumarsruutid
  3. Kuva lennujaam, millel on kõrgeim tipp
  4. Nimekiri PageRanki järgi tähtsamatest lennujaamadest
  5. Loetlege marsruute, kus on kõige madalamad lennuhinnad

Kasutame ülaltoodud arvutuste jaoks Spark GraphX-i ja visualiseerime tulemused Google Data Studio abil.

Kasuta juhtumit - andmekogum :

Joonis: Kasuta juhtumit - USA lennuandmekogum

Kasuta juhtumit - vooskeem :

Järgmine illustratsioon selgitab selgelt kõiki meie lenneandmete analüüsiga seotud toiminguid.

Joonis: Kasutusjuhtum - lennuandmete analüüsi vooskeem, kasutades Spark GraphX-i

Kasuta juhtumit - sädeme rakendamine :

Edasi liikudes laseme nüüd oma projekti ellu viia, kasutades säde jaoks Eclipse IDE-d.

Leidke allpool pseudokood:

// Vajalike klasside importimine import org.apache.spark._ ... import java.io.File objekti lennujaam {def main (args: Array [String]) {// Juhtumiklassi Flight juhtumiklassi Flight loomine (dofM: String, dofW: String, ..., dist: Int) // Sõelumisstringi funktsiooni määratlemine sisendi sõelumiseks lennuklassi def parseFlight (str: String): lend = {val line = str.split (',') lend (rida (0), rida (1), ..., rida (16) .toInt)} val conf = uus SparkConf (). setAppName ('lennujaam'). setMaster ('kohalik [2]') val sc = uus SparkContext (conf) // Laadige andmed RDD-i val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // CSV-liinide RDD-i sõelumine lennuklassi RDD-sse flightRDD = Kaardi ParseFlight tekstiga RDD // Loo lennujaamad RDD koos ID ja nimega val lennujaamad = Map Flight OriginID ja Origin airport.take (1) // vaiketippude määratlemine kuhugi ja lennujaama ID kaardistamine printlns val nowhere = 'nowhere' jaoks val airportMap = Kasuta kaardifunktsiooni .collect.toList.toMap // Loo marsruudid RDD allika ID, sihtkoha ID ja vahemaa val marsruutidega = lennudRDD. Kasuta kaardifunktsiooni .distinct route.take (2) // Loo servad RDD koos lähte ID, sihtkoha ID ja kauguse val servadega = marsruutid.map {(Map OriginID ja DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Määratlege graafik ja kuvage mõned tipud ja servad val graph = Graph (Airport, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Find lennujaamade koguarv val numairports = Vertices Number // Päring 2 - arvutage marsruutide koguarv? val numroutes = Servade arv // Päring 3 - arvutage marsruudid, mille vahemaa on üle 1000 miili graph.edges.filter {Hangi serva kaugus) => kaugus> 1000} .take (3) // Samamoodi kirjutage Scala kood allpool päringuid // Päring 4 - Pikimate marsruutide sorteerimine ja printimine // Päring 5 - kuvage lennujaamade saabuvate ja väljuvate lendude kõrgeima astme tipud // Päring 6 - saate lennujaama nime ID-dega 10397 ja 12478 // Päring 7 - leidke kõige rohkem saabuvate lendudega lennujaam // Päring 8 - Leia kõige suurema väljuvate lendudega lennujaam // Päring 9 - Leia olulisemad lennujaamad vastavalt lehele PageRank // Päring 10 - Sortige lennujaamad järjestuse järgi // Päring 11 - kuvage kõige rohkem olulised lennujaamad // Päring 12 - madalaimate lennukuludega marsruutide leidmine // Päring 13 - Lennujaamade ja nende madalaimate lennukulude leidmine // Päring 14 - kuvage lennujaamakoodid koos sorteeritud madalaimate lennukuludega

Kasuta juhtumit - tulemuste visualiseerimine :

Analüüsi visualiseerimiseks kasutame Google Data Stuudiot. Google Data Studio on Google Analytics 360 Suite'i toode. Kasutame teenust Geo Map, et kaardistada lennujaamad nende vastavas asukohas USA kaardil ja kuvada mõõdikute kogus.

  1. Kuvab lendude koguarvu lennujaama kohta
  2. Kuvage sihtkoha marsruutide meetriline summa igast lennujaamast
  3. Kuvab kõigi lendude viivituse lennujaama kohta

Nüüd lõpetab see Spark GraphXi ajaveebi. Loodan, et teile meeldis seda lugeda ja pidasite seda informatiivseks. Vaadake meie Apache Sparki sarja järgmist ajaveebi Apache Sparkis turuvalmis.

Soovitame järgmist Apache Sparki koolitus Lennuandmete analüüsi video Edurekast, alustades:

Apache Sparki koolitus Spark GraphX ​​lennuandmete analüüs | Edureka

Kas teil on meile küsimus? Palun mainige seda kommentaaride jaotises ja võtame teiega kõige varem ühendust.

Kui soovite õppida Sparki ja luua karjääri Sparki valdkonnas ning koguda asjatundlikkust suuremahulise andmetöötluse teostamiseks, kasutades RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​ja Scala koos Real Life kasutusjuhtumitega, vaadake meie interaktiivset otseülekannet -online siin, kaasas 24 * 7 tugi, mis juhendab teid kogu õppeperioodi vältel.