Spark GraphX ​​-opastus - Graafinen analyysi Apache Sparkissa



Tämä GraphX-opetusblogi esittelee sinut Apache Spark GraphX ​​-palveluun, sen ominaisuuksiin ja komponentteihin, mukaan lukien lentotietojen analysointiprojekti.

GraphX on Apache Sparkin sovellusliittymä kaavioille ja kuvaajien rinnakkaislaskennalle. GraphX ​​yhdistää ETL (Extract, Transform & Load) -prosessin, tutkivan analyysin ja iteratiivisen kuvaajan laskennan yhdessä järjestelmässä. Kaavioiden käyttö näkyy Facebookin ystävissä, LinkedInin yhteyksissä, Internetin reitittimissä, galaksien ja tähtien välisissä suhteissa astrofysiikassa ja Google Mapsissa. Vaikka kaaviolaskennan käsite näyttää olevan hyvin yksinkertainen, graafien käyttö on kirjaimellisesti rajaton, kun käytetään tapauksia katastrofien havaitsemisessa, pankkitoiminnassa, osakemarkkinoilla, pankki- ja maantieteellisissä järjestelmissä.Tämän sovellusliittymän käytön oppiminen on tärkeä osa .Tämän blogin kautta opimme Spark GraphX: n käsitteet, sen ominaisuudet ja komponentit esimerkkien avulla ja käymme läpi Flight Data Analyticsin täydellisen käyttötapauksen GraphX: n avulla.

Käsittelemme seuraavia aiheita tässä Spark GraphX ​​-blogissa:





  1. Mitä ovat kuvaajat?
  2. Käytä kuvaajan laskennan tapauksia
  3. Mikä on Spark GraphX?
  4. Spark GraphX ​​-ominaisuudet
  5. GraphX: n ymmärtäminen esimerkkien avulla
  6. Käytä tapausta - lentotietojen analyysi GraphX: n avulla

Mitä ovat kuvaajat?

Graafi on matemaattinen rakenne, joka vastaa joukkoa esineitä, joissa jotkut objektiparit ovat jossain mielessä sukulaisia. Nämä suhteet voidaan esittää käyttämällä graafin muodostavia reunoja ja pisteitä. Pisteet edustavat objekteja ja reunat osoittavat eroja näiden kohteiden välillä.

Kaavio-käsitteet - Spark GraphX ​​-opastus - EdurekaKuva: Spark GraphX ​​-opastus - Pisteet, reunat ja tripletit kaavioissa



Tietojenkäsittelytieteessä kaavio on abstrakti tietotyyppi, jonka on tarkoitus toteuttaa suuntaamaton kaavio ja suunnatut kaaviokäsitteet matematiikasta, erityisesti graafiteorian kenttä. Kaaviotietorakenne voi myös liittää kuhunkin reunaan joitain reuna-arvo , kuten symbolinen tarra tai numeerinen attribuutti (hinta, kapasiteetti, pituus,jne.).

Käytä kuvaajan laskennan tapauksia

Seuraavat käyttötapaukset antavat perspektiivin kaavion laskennalle ja mahdollisuuden toteuttaa muita ratkaisuja kaavioiden avulla.

  1. Katastrofin havaitsemisjärjestelmä

    Kaavioita voidaan käyttää katastrofien, kuten hurrikaanien, maanjäristysten, tsunamien, metsäpalojen ja tulivuorien, havaitsemiseen ihmisten varoittamiseksi.



    miten käyttää charatia java
  2. Sivujärjestys PageRank-arvoa voidaan käyttää vaikuttajien löytämiseen mistä tahansa verkosta, kuten paperiviittausverkosta tai sosiaalisen median verkostosta.
  3. Taloudellisten petosten havaitseminen

    Kaavioanalyysiä voidaan käyttää finanssitransaktioiden seuraamiseen ja taloudellisiin petoksiin ja rahanpesuun osallistuvien henkilöiden havaitsemiseksi.

  4. Liiketoiminta-analyysi

    Kaaviot, kun niitä käytetään yhdessä koneoppimisen kanssa, auttavat ymmärtämään asiakkaiden ostotrendit. Esim. Uber, McDonald’s jne.

  5. Maantieteelliset tietojärjestelmät

    Kaavioita käytetään intensiivisesti maantieteellisten tietojärjestelmien toimintojen kehittämiseen, kuten valuma-alueen rajaus ja sääennuste.

  6. Google Pregel

    Pregel on Googlen skaalautuva ja vikasietoinen alusta, jonka sovellusliittymä on riittävän joustava ilmaisemaan mielivaltaisen kuvaajanalgoritmeja.

Mikä on Spark GraphX?

GraphX on Spark API graafeille ja kuvaajien rinnakkaislaskennalle. Se sisältää kasvavan kaavion algoritmien ja rakentajien kokoelman kaavioanalytiikkatehtävien yksinkertaistamiseksi.


GraphX ​​laajentaa Spark RDD: tä joustavan hajautetun ominaisuuden kaavion avulla.
Ominaisuuskaavio on suunnattu multigrafiikka, jolla voi olla useita reunoja rinnakkain. Jokaisella reunalla ja kärjellä on käyttäjän määrittelemät ominaisuudet. Rinnakkaiset reunat sallivat useitasamojen pisteiden väliset suhteet.

Spark GraphX ​​-ominaisuudet

Spark GraphX: n ominaisuudet ovat seuraavat:

  1. Joustavuus :
    Spark GraphX ​​toimii sekä kaavioiden että laskelmien kanssa. GraphX ​​yhdistää ETL: n (pura, muunna ja lataa), tutkivan analyysin ja iteratiivisen kuvaajan laskennan samaan järjestelmään. Voimme tarkastella samoja tietoja kuin kaaviot ja kokoelmat, muuntaa ja liittää kaavioita RDD: hen tehokkaasti ja kirjoittaa mukautettuja iteratiivisia kaavioalgoritmeja Pregel API: n avulla.
  2. Nopeus :
    Spark GraphX ​​tarjoaa vertailukelpoisen suorituskyvyn nopeimpiin erikoistuneisiin kaavioiden käsittelyjärjestelmiin. Se on verrattavissa nopeimpiin kaavioihin, mutta säilyttää Sparkin joustavuuden, vikasietoisuuden ja helppokäyttöisyyden.
  3. Kasvava algoritmikirjasto :
    Voimme valita kasvavasta graafi-algoritmien kirjastosta, jota Spark GraphX ​​tarjoaa. Jotkut suosituimmista algoritmeista ovat sivun sijoitus, liitetyt komponentit, tarran eteneminen, SVD ++, vahvasti liitetyt komponentit jakolmiomäärä.

GraphX: n ymmärtäminen esimerkkien avulla

Ymmärrämme nyt Spark GraphX: n käsitteet esimerkin avulla. Tarkastellaan yksinkertaista kaaviota alla olevan kuvan mukaisesti.

Kuva: Spark GraphX ​​-opastus - kaavioesimerkki

Kaaviota tarkastelemalla voimme kerätä tietoa ihmisistä (kärjistä) ja niiden välisistä suhteista (reunat). Tässä oleva kaavio kuvaa Twitter-käyttäjiä ja niitä, joita he seuraavat Twitterissä. Esimerkiksi Bob seuraa Daviden ja Alicen Twitterissä.

Toteutetaan sama Apache Sparkin avulla. Ensin tuomme tarvittavat luokat GraphX: lle.

// Tarvittavien luokkien tuominen tuo 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

Pisteiden näyttäminen :Lisäksi näytämme nyt kaikki käyttäjien nimet ja ikät (pisteet).

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val-graafi: Graafi [(String, Int), Int] = Kaavio (vertexRDD, edgeRDD) graph.vertices.filter {tapaus (id, (nimi, ikä)) => ikä> 30} .collect.foreach {case (id, (nimi, ikä)) => println ( s '$ nimi on $ age')}

Yllä olevan koodin lähtö on seuraava:

mikä on taulukon parametri
DavidOn42 FranOnviisikymmentä ToimOn55 CharlieOn65

Reunojen näyttäminen : Katsotaanpa, kuka henkilö tykkää Twitteristä.

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

Yllä olevan koodin lähtö on seuraava:

BobtykkääAlice BobtykkääDavid CharlietykkääBob CharlietykkääFran DavidtykkääAlice ToimtykkääBob ToimtykkääCharlie ToimtykkääFran

Nyt kun olemme ymmärtäneet GraphX: n perusteet, sukelkaamme vähän syvemmälle ja suorittaamme samalla edistyneempiä laskelmia.

Seuraajien määrä : Jokaisella kaavion käyttäjällä on erilainen seuraajamäärä. Katsotaanpa kaikkien käyttäjien seuraajia.

// Luokan määritteleminen käyttäjän omaisuuden tapausluokan selkeämmäksi mallintamiseksi Käyttäjä (nimi: Merkkijono, ikä: Int, inDeg: Int, outDeg: Int) // Käyttäjän kaavion luominen val initialUserGraph: Kaavio [Käyttäjä, Int] = kaavio. mapVertices {tapaus (id, (nimi, ikä)) => Käyttäjä (nimi, ikä, 0, 0)} // Tutkintotietojen täyttäminen val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Käyttäjä (u.nimi, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {tapaus (id, u, outDegOpt) => Käyttäjä (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} kohteelle ((id, property)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Yllä olevan koodin lähtö on seuraava:

Käyttäjä yksikutsutaanAliceja pitää siitä2ihmiset. Käyttäjä 2kutsutaanBobja pitää siitä2ihmiset. Käyttäjä 3kutsutaanCharlieja pitää siitäyksiihmiset. Käyttäjä 4kutsutaanDavidja pitää siitäyksiihmiset. Käyttäjä 5kutsutaanToimja pitää siitä0ihmiset. Käyttäjä 6kutsutaanFranja pitää siitä2ihmiset.

Vanhimmat seuraajat : Voimme myös lajitella seuraajat niiden ominaisuuksien mukaan. Löydetään jokaisen käyttäjän vanhimmat seuraajat iän mukaan.

// Jokaisen käyttäjän vanhimman seuraajan löytäminen vanhinFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Lähetä jokaiselle reunalle viesti kohdepisteeseen lähteen attribuutin kanssa kärjen reuna => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Viestien yhdistämiseksi ota viesti vanhemmalle seuraajalle (a, b) => if (a. _2> b._2) a muu b)

Yllä olevan koodin lähtö on seuraava:

Davidon Vanhin seuraajaAlice. Charlieon Vanhin seuraajaBob. Toimon Vanhin seuraajaCharlie. Bobon Vanhin seuraajaDavid. Toimei ole seuraajia. Charlieon Vanhin seuraajaFran. 

Käyttötapaus: Lentotietojen analysointi Spark GraphX: n avulla

Nyt kun olemme ymmärtäneet Spark GraphX: n peruskäsitteet, ratkaise tosielämän ongelma GraphX: n avulla. Tämä antaa meille luottamusta työskennellä kaikissa Spark-projekteissa tulevaisuudessa.

Ongelma : Jos haluat analysoida reaaliaikaisia ​​lentotietoja Spark GraphX: n avulla, tarjoa lähes reaaliaikaiset laskentatulokset ja visualisoi tulokset Google Data Studion avulla.

Käytä tapausta - Laskelmat tehdään :

  1. Laske lentoreittien kokonaismäärä
  2. Laske ja lajittele pisimmät lentoreitit
  3. Näytä lentokenttä, jolla on korkein aste
  4. Luettelo tärkeimmistä lentokentistä PageRankin mukaan
  5. Luettele reitit, joilla on halvimmat lentohinnat

Käytämme Spark GraphX: ää yllä oleviin laskelmiin ja visualisoimme tulokset Google Data Studion avulla.

Use Case - Dataset :

Kuva: Käytä tapausta - USA: n lentotiedot

Käyttötapa - vuokaavio :

Seuraava kuva selittää selvästi kaikki lentotietojen analyysiin liittyvät vaiheet.

oppia käyttämään visuaalista studiota

Kuva: Käyttötapaus - lentotietojen analyysin vuokaavio Spark GraphX: n avulla

Käyttötapaus - kipinän toteutus :

Siirrymme eteenpäin, nyt toteutetaan projektimme käyttämällä Eclipse IDE for Spark -ohjelmaa.

Etsi Pseudokoodi alla:

// Tarvittavien luokkien tuominen tuo org.apache.spark._ ... Tuo java.io.File-objekti lentokenttä {def main (args: Array [String]) {// Case-luokan lentotapausten luonti Flight (dofM: Merkkijono, dofW: Merkkijono, ..., dist: Int) // Parse-merkkijonofunktion määritteleminen syötteen jäsentämiseksi lentoluokkaan def parseFlight (str: String): Flight = {val line = str.split (',') Flight (rivi (0), rivi (1), ..., rivi (16) .toInt)} val conf = uusi SparkConf (). setAppName ('lentokenttä'). setMaster ('paikallinen [2]') val sc = uusi SparkContext (conf) // Lataa tiedot RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // jäsennä CSV-linjojen RDD lentoluokkien RDD lennotRDD = Kartta ParseFlight tekstiviestiin RDD // Luo lentokentät RDD tunnuksella ja nimellä val airport = Map Flight OriginID and Origin airport.take (1) // Määritetyn oletuspisteen määrittäminen ja lentoaseman tunnuksen kartoittaminen printlns val nowhere = 'nowhere' val airportMap = Käytä karttatoimintoa .collect.toList.toMap // Luo reitit RDD lähdetunnuksen, kohde-ID: n ja etäisyys reittien kanssa = lennotRDD. Käytä karttatoimintoa .erotetut reitit.take (2) // Luo reunat RDD lähdetunnuksella, määränpäätunnuksella ja etäisyydellä valareunat = reitti.map {(Kartan alkuperätunnus ja määränpäätunnus) => Reuna (org_id.toLong, dest_id.toLong, distance)} reunat.take (1) // Määritä kaavio ja näytä joitain pisteitä ja reunoja val-kaavio = Kaavio (Lentokentät, reunat ja ei missään) graph.vertices.take (2) graph.edges.take (2) // Kysely 1 - Etsi lentokenttien kokonaismäärä val numairports = Vertices Number // Kysely 2 - Laske reittien kokonaismäärä? val numroutes = Reunojen lukumäärä // Kysely 3 - Laske reitti, jonka etäisyys on yli 1000 mailia graph.edges.filter {Hanki reunaetäisyys) => etäisyys> 1000} .take (3) // Kirjoita samalla tavalla Scala-koodi kyselyjen alla // Kysely 4 - Lajittele ja tulosta pisimmät reitit // Kysely 5 - Näytä korkeimpien pisteiden pisteet tuleville ja lähteville lentoasemien lennoille // Kysely 6 - Hae lentokentän nimi tunnuksilla 10397 ja 12478 // Kysely 7 - Etsi lentokenttä, jolla on eniten saapuvia lentoja // Kysely 8 - Etsi lentoasema, jolla on eniten lähteviä lentoja // Kysely 9 - Löydä tärkeimmät lentokentät PageRankin mukaan // Kysely 10 - Lajittele lentokentät luokituksen mukaan // Kysely 11 - Näytä eniten tärkeät lentokentät // Kysely 12 - Löydä reitit, joilla on pienimmät lentokustannukset // Kysely 13 - Etsi lentokentät ja niiden alhaisimmat lentokustannukset // Kysely 14 - Näytä lentokenttäkoodit ja lajiteltu pienimmät lentokustannukset

Käyttötapaus - Tulosten visualisointi :

Käytämme Google Data Studiota analyysimme visualisointiin. Google Data Studio on Google Analytics 360 Suiten alla oleva tuote. Geo Map -palvelun avulla kartoitetaan lentokentät niiden sijainneissa USA: n kartalla ja näytetään metriikkamäärä.

  1. Näytä lentojen kokonaismäärä lentokenttää kohti
  2. Näytä jokaisen lentokentän kohdereittien metrinen summa
  3. Näytä kaikkien lentojen viivästyminen lentokenttää kohti

Nyt tämä päättyy Spark GraphX ​​-blogi. Toivottavasti pidit siitä lukemisesta ja pidit informatiivisena. Katso seuraava blogi Apache Spark -sarjastamme tulla markkinoille valmiiksi Apache Sparkissa.

Suosittelemme seuraavaa Apache Spark -koulutus Lentotietojen analyysi -video Edurekasta aluksi:

Apache Spark -koulutus Spark GraphX: n lentotietojen analyysi Edureka

Onko sinulla kysymys meille? Mainitse se kommenttiosassa ja otamme sinuun yhteyttä aikaisintaan.

Jos haluat oppia Sparkia ja rakentaa uraa Sparkin toimialueella ja rakentaa asiantuntemusta laajamittaisen tietojenkäsittelyn suorittamiseksi RDD: n, Spark Streamingin, SparkSQL: n, MLlibin, GraphX: n ja Scalan kanssa tosielämän käyttötapauksilla, tutustu interaktiiviseen, livenä -online tässä, jonka mukana tulee 24 * 7 -tuki, joka ohjaa sinua koko oppimisjaksosi ajan.