Spark GraphX ​​apmācība - grafiku analīze Apache Spark



Šis GraphX ​​apmācības emuārs iepazīstinās jūs ar Apache Spark GraphX, tā funkcijām un komponentiem, tostarp ar lidojuma datu analīzes projektu.

GraphX ir Apache Spark API grafikiem un grafikam paralēlai skaitļošanai. GraphX ​​vienā sistēmā apvieno ETL (Extract, Transform & Load) procesu, izpētes analīzi un iteratīvu grafu aprēķinu. Grafiku izmantošana ir redzama Facebook draugos, LinkedIn savienojumos, interneta maršrutētājos, attiecībās starp galaktikām un zvaigznēm astrofizikā un Google Maps. Lai gan grafu aprēķināšanas jēdziens, šķiet, ir ļoti vienkāršs, grafiku pielietojums ir burtiski neierobežots, lietojot gadījumus katastrofu atklāšanā, banku, akciju tirgū, banku un ģeogrāfiskajās sistēmās, lai tikai minētu dažus.Mācīšanās izmantot šo API ir svarīga .Izmantojot šo emuāru, mēs uzzināsim Spark GraphX ​​jēdzienus, tā funkcijas un komponentus, izmantojot piemērus, un iziesim pilnu Flight Data Analytics izmantošanas gadījumu, izmantojot GraphX.

Šajā Spark GraphX ​​emuārā mēs apskatīsim šādas tēmas:





  1. Kas ir grafiki?
  2. Izmantojiet grafu aprēķināšanas gadījumus
  3. Kas ir Spark GraphX?
  4. Spark GraphX ​​funkcijas
  5. Izpratne par GraphX ​​ar piemēriem
  6. Izmantot gadījumu - lidojuma datu analīze, izmantojot GraphX

Kas ir grafiki?

Grafiks ir matemātiska struktūra, kas atbilst objektu kopai, kurā daži objektu pāri ir saistīti savā ziņā. Šīs attiecības var attēlot, izmantojot malas un virsotnes, veidojot grafiku. Virsotnes attēlo objektus, un malas parāda dažādas attiecības starp šiem objektiem.

Grafiku koncepcijas - Spark GraphX ​​apmācība - EdurekaAttēls: Spark GraphX ​​apmācība - vertikāli, malas un tripleti grafikos



Datorzinātnēs grafiks ir abstrakts datu tips, kas paredzēts, lai īstenotu nenovirzītu grafu un virzītus matemātikas jēdzienus, īpaši grafu teorijas jomu. Grafika datu struktūra var arī būt saistīta ar katru malu malu vērtība , piemēram, simbolisku etiķeti vai skaitlisku atribūtu (izmaksas, ietilpība, garums,utt.).

Izmantojiet grafu aprēķināšanas gadījumus

Turpmākie lietošanas gadījumi dod perspektīvu grafu aprēķināšanai un papildu iespējas citu risinājumu ieviešanai, izmantojot grafikus.

  1. Katastrofu atklāšanas sistēma

    Grafikus var izmantot, lai atklātu tādas katastrofas kā viesuļvētras, zemestrīces, cunami, meža ugunsgrēkus un vulkānus, lai sniegtu brīdinājumus cilvēku trauksmei.



  2. Page Rank Page Rank var izmantot, lai atrastu ietekmētājus jebkurā tīklā, piemēram, papīra citātu tīklā vai sociālo mediju tīklā.
  3. Finanšu krāpšanas atklāšana

    Diagrammas analīzi var izmantot, lai uzraudzītu finanšu darījumus un atklātu cilvēkus, kas iesaistīti finanšu krāpšanā un naudas atmazgāšanā.

  4. Biznesa analīze

    Grafiki, ja tos lieto kopā ar mašīnmācīšanos, palīdz izprast klientu pirkšanas tendences. Piem., Uber, McDonald’s utt.

  5. Ģeogrāfiskās informācijas sistēmas

    Grafikus intensīvi izmanto, lai attīstītu ģeogrāfiskās informācijas sistēmu funkcijas, piemēram, ūdensšķirtnes norobežojumu un laika apstākļu prognozēšanu.

  6. Google Pregel

    Pregel ir Google mērogojama un kļūdām toleranta platforma ar API, kas ir pietiekami elastīga, lai izteiktu patvaļīgu diagrammualgoritmi.

Kas ir Spark GraphX?

GraphX ir Spark API grafikiem un grafikiem paralēlai skaitļošanai. Tas ietver arvien lielāku grafu algoritmu un veidotāju kolekciju, lai vienkāršotu diagrammu analīzes uzdevumus.


GraphX ​​paplašina Spark RDD ar elastīga izplatītā īpašuma grafiku.
Īpašuma grafiks ir virzīts multigrafs, kuram var būt vairākas malas paralēli. Katrai malai un virsotnei ir saistītas lietotāja definētas īpašības. Paralēlās malas pieļauj vairākusattiecības starp tām pašām virsotnēm.

Spark GraphX ​​funkcijas

Spark GraphX ​​funkcijas ir šādas:

  1. Elastīgums :
    Spark GraphX ​​darbojas gan ar grafikiem, gan ar aprēķiniem. GraphX ​​apvieno ETL (Extract, Transform & Load), izpētes analīzi un iteratīvu grafu aprēķinu vienā sistēmā. Mēs varam apskatīt tos pašus datus kā grafikus, tā arī kolekcijas, efektīvi pārveidot un savienot grafikus ar RDD un rakstīt pielāgotus iteratīvus diagrammu algoritmus, izmantojot Pregel API.
  2. Ātrums :
    Spark GraphX ​​nodrošina salīdzināmu veiktspēju ar visātrākajām specializētajām grafu apstrādes sistēmām. Tas ir salīdzināms ar ātrākajām grafu sistēmām, vienlaikus saglabājot Spark elastību, kļūdu toleranci un ērtu lietošanu.
  3. Augoša algoritma bibliotēka :
    Mēs varam izvēlēties no pieaugošās grafiku algoritmu bibliotēkas, ko piedāvā Spark GraphX. Daži no populārajiem algoritmiem ir lapas rangs, savienoti komponenti, etiķešu izplatīšana, SVD ++, stingri savienoti komponenti untrijstūra skaits.

Izpratne par GraphX ​​ar piemēriem

Tagad mēs sapratīsim Spark GraphX ​​jēdzienus, izmantojot piemēru. Apsvērsim vienkāršu diagrammu, kā parādīts zemāk esošajā attēlā.

Attēls: Spark GraphX ​​apmācība - grafika piemērs

Aplūkojot grafiku, mēs varam iegūt informāciju par cilvēkiem (virsotnēm) un attiecībām starp tiem (malām). Grafiks šeit parāda Twitter lietotājus un tos, kuriem viņi seko Twitter. Par piem. Bobs tviterī seko Davidei un Alisei.

Ļaujiet mums to pašu īstenot, izmantojot Apache Spark. Pirmkārt, mēs importēsim GraphX ​​nepieciešamās klases.

// Nepieciešamo klašu importēšana importēt org.apache.spark._ importēt org.apache.spark.rdd.RDD importēt org.apache.spark.util.IntParam importēt org.apache.spark.graphx._ importēt org.apache.spark .graphx.util.GraphGenerators

Attēlo virsotnes :Tagad mēs parādīsim visus lietotāju vārdus un vecumus (virsotnes).

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val grafiks: Grafiks [(String, Int), Int] = Grafiks (vertexRDD, edgeRDD) graph.vertices.filter {gadījums (id, (vārds, vecums)) => vecums> 30} .collect.foreach {gadījums (id, (nosaukums, vecums)) => println ( s '$ name is $ age')}

Iepriekš minētā koda izeja ir šāda:

Deividsir42 Fransirpiecdesmit Redir55 Čārlijsir65

Attēlo malas : Apskatīsim, kura persona Twitter patīk.

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

Iepriekš minētā koda izeja ir šāda:

BobspatīkAlise BobspatīkDeivids ČārlijspatīkBobs ČārlijspatīkFrans DeividspatīkAlise RedpatīkBobs RedpatīkČārlijs RedpatīkFrans

Tagad, kad esam sapratuši GraphX ​​pamatus, ienirsim nedaudz dziļāk un veiksim dažus uzlabotus aprēķinus par to pašu.

Sekotāju skaits : Katram mūsu diagrammas lietotājam ir atšķirīgs sekotāju skaits. Apskatīsim visus sekotājus katram lietotājam.

c ++ fibonacci sērija
// Klases definēšana, lai skaidrāk modelētu lietotāja rekvizītu lietu klasi Lietotājs (nosaukums: String, vecums: Int, inDeg: Int, outDeg: Int) // Lietotāja grafika izveide val initialUserGraph: Graph [User, Int] = graph. mapVertices {gadījums (id, (vārds, vecums)) => Lietotājs (vārds, vecums, 0, 0)} // Informācijas par grādiem aizpildīšana val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Lietotājs (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {gadījums (id, u, outDegOpt) => Lietotājs (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} domēnam ((id, īpašums)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Iepriekš minētā koda izeja ir šāda:

Lietotājs vienstiek sauktsAliseun patīk2cilvēki. Lietotājs 2tiek sauktsBobsun patīk2cilvēki. Lietotājs 3tiek sauktsČārlijsun patīkvienscilvēki. Lietotājs 4tiek sauktsDeividsun patīkvienscilvēki. Lietotājs 5tiek sauktsRedun patīk0cilvēki. Lietotājs 6tiek sauktsFransun patīk2cilvēki.

Vecākie sekotāji : Sekotājus mēs varam arī kārtot pēc viņu īpašībām. Atradīsim katra lietotāja vecākos sekotājus pēc vecuma.

// Vecākā sekotāja atrašana katram lietotājam val vanhākais sekotājs: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Katrai malai nosūtiet ziņojumu uz galamērķa virsotni ar avota atribūtu virsotnes mala => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Lai apvienotu ziņojumus, paņemiet ziņojumu vecākajam sekotājam (a, b) => ja (a. _2> b._2) a cits b)

Iepriekš minētā koda izeja ir šāda:

Deividsir vecākais sekotājsAlise. Čārlijsir vecākais sekotājsBobs. Redir vecākais sekotājsČārlijs. Bobsir vecākais sekotājsDeivids. Rednav sekotāju. Čārlijsir vecākais sekotājsFrans. 

Izmantošanas gadījums: Lidojuma datu analīze, izmantojot Spark GraphX

Tagad, kad esam sapratuši Spark GraphX ​​pamatjēdzienus, atrisināsim reālās dzīves problēmas, izmantojot GraphX. Tas mums palīdzēs dot pārliecību par darbu pie jebkuriem Spark projektiem nākotnē.

Problēmas izklāsts : Lai analizētu reāllaika lidojuma datus, izmantojot Spark GraphX, sniedziet gandrīz reāllaika aprēķinu rezultātus un vizualizējiet rezultātus, izmantojot Google Data Studio.

Izmantošanas gadījums - jāveic aprēķini :

  1. Aprēķiniet kopējo lidojumu maršrutu skaitu
  2. Aprēķiniet un kārtojiet garākos lidojuma maršrutus
  3. Parādiet lidostu ar augstākās pakāpes virsotni
  4. Uzskaitiet vissvarīgākās lidostas atbilstoši PageRank
  5. Uzskaitiet maršrutus ar viszemākajām lidojuma izmaksām

Iepriekš minētajiem aprēķiniem mēs izmantosim Spark GraphX ​​un vizualizēsim rezultātus, izmantojot Google Data Studio.

Izmantot lietu - datu kopa :

Attēls: Izmantot gadījumu - ASV lidojuma datu kopa

Izmantošanas gadījums - plūsmas diagramma :

Šajā attēlā ir skaidri izskaidrotas visas darbības, kas saistītas ar mūsu lidojuma datu analīzi.

Attēls: Izmantošanas gadījums - lidojuma datu analīzes plūsmas diagramma, izmantojot Spark GraphX

Izmantošanas gadījums - dzirksteļa ieviešana :

Ejot uz priekšu, tagad ļaujiet mums īstenot savu projektu, izmantojot Eclipse IDE Spark.

Zemāk atrodiet pseidokodu:

// Nepieciešamo klašu importēšana importējiet org.apache.spark._ ... importējiet java.io.File objekta lidosta {def main (args: Array [String]) {// Lietu klases izveide Lidojuma lietu klase Lidojums (dofM: String, dofW: String, ..., dist: Int) // Parsēšanas virknes funkcijas noteikšana, lai analizētu ievadi Flight klases 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 = jauns SparkContext (conf) // Ielādējiet datus RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Parsējiet CSV līniju RDD RD lidojumu klašu RDD flightRDD = Kartes ParseFlight uz tekstu RDD // Izveidot lidostas RDD ar ID un nosaukumu val Airport = Map Flight OriginID un Origin airport.take (1) // Noklusējuma virsotnes definēšana, ko sauc par nekurieni, un lidostas ID kartēšana printlns val nowhere = 'nowhere' val airportMap = Izmantot kartes funkciju .collect.toList.toMap // Izveidot maršrutus RDD ar sourceID, destinationID un distance val maršrutiem = lidojumiRDD. Izmantojiet Map Function .distinct route.take (2) // Izveidojiet RDD malas ar sourceID, destinationID un distance val malām = route.map {(Map OriginID and DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Definējiet grafiku un parādiet dažas virsotnes un malas val graph = Graph (Airport, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Find kopējais lidostu skaits val numairports = Vertices Number // Vaicājums 2 - Aprēķināt kopējo maršrutu skaitu? val numroutes = Malu skaits // 3. vaicājums - aprēķiniet tos maršrutus, kuru attālumi pārsniedz 1000 jūdzes graph.edges.filter {Iegūstiet attālumu malā) => attālums> 1000} .take (3) // Līdzīgi uzrakstiet Scala kodu zem vaicājumiem // 4. vaicājums - kārtojiet un izdrukājiet garākos maršrutus // 5. vaicājums - parādiet augstākās pakāpes virsotnes ienākošajiem un izejošajiem lidostu lidojumiem // 6. vaicājums - iegūstiet lidostas nosaukumu ar ID 10397 un 12478 // Vaicājums 7 - atrodiet lidosta ar augstākajiem ienākošajiem lidojumiem // 8. vaicājums - atrodiet lidostu ar augstākajiem izejošajiem lidojumiem // 9. vaicājums - atrodiet vissvarīgākās lidostas saskaņā ar PageRank // Vaicājums 10 - Kārtojiet lidostas pēc reitinga // Vaicājums 11 - Parādiet visvairāk svarīgas lidostas // 12. vaicājums - atrodiet maršrutus ar viszemākajām lidojuma izmaksām // vaicājums Nr. 13 - atrodiet lidostas un to zemākās lidojuma izmaksas // vaicājums 14 - parādiet lidostas kodus un sakārtotās zemākās lidojuma izmaksas

Izmantošanas gadījums - rezultātu vizualizēšana :

Mēs izmantosim Google Data Studio, lai vizualizētu mūsu analīzi. Google Data Studio ir produkts, kas ietilpst Google Analytics 360 Suite. Mēs izmantosim Geo Map pakalpojumu, lai kartētu lidostas to attiecīgajās vietās ASV kartē un parādītu metrikas daudzumu.

  1. Parādiet kopējo lidojumu skaitu vienā lidostā
  2. Parādiet galamērķa maršrutu metrisko summu no katras lidostas
  3. Parādiet visu lidojumu kopējo kavēšanos vienā lidostā

Tagad tas noslēdz Spark GraphX ​​emuāru. Es ceru, ka jums patika to lasīt un jums tas šķita informatīvs. Pārbaudiet nākamo emuāru mūsu Apache Spark sērijā lai kļūtu gatavs Apache Spark tirgū.

Mēs iesakām sekojošo Apache Spark apmācība Lidojuma datu analīzes video no Edureka, lai sāktu ar:

Apache Spark apmācība Spark GraphX ​​lidojuma datu analīze Edureka

Vai mums ir jautājums? Lūdzu, pieminējiet to komentāru sadaļā, un mēs ar jums sazināsimies ātrāk.

Ja vēlaties iemācīties Spark un veidot karjeru Spark jomā un iegūt zināšanas, lai veiktu liela mēroga datu apstrādi, izmantojot RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​un Scala ar reālās dzīves lietojumiem, apskatiet mūsu interaktīvo tiešraidi -tiešsaistē šeit, kas nāk ar 24 * 7 atbalstu, kas palīdzēs jums visu mācību laiku.