„GraphX“ yra „Apache Spark“ API grafikams ir lygiagrečiam grafikų skaičiavimui. „GraphX“ vienoje sistemoje vienija ETL (Extract, Transform & Load) procesą, tiriamąją analizę ir iteracinį grafiko skaičiavimą. Grafikų naudojimas gali būti matomas „Facebook“ drauguose, „LinkedIn“ ryšiuose, interneto maršrutizatoriuose, galaktikų ir žvaigždžių santykiuose astrofizikoje ir „Google“ žemėlapiuose. Nors grafų skaičiavimo samprata atrodo labai paprasta, grafikų taikymas tiesiogine prasme yra neribotas, kai naudojami tik nelaimių aptikimo, bankininkystės, vertybinių popierių rinkos, bankininkystės ir geografinių sistemų atvejai.Išmokti naudotis šia API yra svarbi .Per šį tinklaraštį mes sužinosime „Spark GraphX“ sąvokas, jo ypatybes ir komponentus, naudodamiesi pavyzdžiais, ir peržiūrėsime visišką „Flight Data Analytics“ naudojimo atvejį naudodami „GraphX“.
Šiame „Spark GraphX“ tinklaraštyje aptarsime šias temas:
- Kas yra grafikai?
- Naudokite grafikų skaičiavimo atvejus
- Kas yra „Spark GraphX“?
- „Spark GraphX“ funkcijos
- Suprasti „GraphX“ su pavyzdžiais
- Naudokite atvejį - Skrydžio duomenų analizė naudojant „GraphX“
Kas yra grafikai?
Grafikas yra matematinė struktūra, prilygstanti objektų rinkiniui, kuriame kai kurios objektų poros yra tam tikra prasme susijusios. Šiuos santykius galima pavaizduoti naudojant kraštus ir viršūnes, sudarančias grafiką. Viršūnės žymi objektus, o kraštai rodo įvairius tų objektų santykius.
Paveikslėlis: „Spark GraphX“ pamoka - vertikalės, kraštai ir trynukai grafikuose
Informatikos srityje grafikas yra abstraktus duomenų tipas, skirtas įgyvendinti nenukreiptą grafiką ir nukreiptas grafiko sąvokas iš matematikos, konkrečiai grafų teorijos srities. Grafiko duomenų struktūra taip pat gali būti susieta su kiekvienu kraštu krašto vertė , pvz., simbolinė etiketė ar skaitinis atributas (kaina, talpa, ilgis,ir pan.).
Naudokite grafikų skaičiavimo atvejus
Šie naudojimo atvejai suteikia grafiko skaičiavimo perspektyvą ir tolesnę galimybę įgyvendinti kitus sprendimus naudojant grafikus.
- Nelaimių aptikimo sistema
Grafikai gali būti naudojami tokioms nelaimėms kaip uraganai, žemės drebėjimai, cunamis, miškų gaisrai ir ugnikalniai aptikti, kad būtų galima įspėti žmones.
- Puslapio įvertinimas „Page Rank“ gali būti naudojamas ieškant įtaką darančių asmenų bet kuriame tinkle, pavyzdžiui, popieriaus šaltinių tinkle ar socialinės žiniasklaidos tinkle.
- Finansinio sukčiavimo nustatymas
Grafinė analizė gali būti naudojama finansinėms operacijoms stebėti ir žmonėms, susijusiems su finansiniu sukčiavimu ir pinigų plovimu, nustatyti.
- Verslo analizė
Grafikai, naudojami kartu su mašininiu mokymusi, padeda suprasti klientų pirkimo tendencijas. Pvz. „Uber“, „McDonald‘s“ ir kt.
- Geografinės informacinės sistemos
Grafikai intensyviai naudojami kuriant geografinių informacinių sistemų funkcijas, tokias kaip vandens baseino ribos ir orų prognozavimas.
kaip įdiegti hadoop Linux
- „Google Pregel“
„Pregel“ yra „Google“ keičiamo dydžio ir tolerantiška triktims platforma, kurios API yra pakankamai lanksti norint išreikšti savavališką grafikąalgoritmai.
Kas yra „Spark GraphX“?
„GraphX“ yra „Spark“ API grafikams ir lygiagrečiam grafikų skaičiavimui. Jame yra vis didesnė grafikų algoritmų ir kūrėjų kolekcija, skirta supaprastinti diagramų analizės užduotis.
„GraphX“ išplečia „Spark RDD“ naudodamas elastingo paskirstyto turto grafiką.Nuosavybės grafikas yra nukreiptas multigrafas, kuris gali turėti keletą kraštų lygiagrečiai. Kiekvienas kraštas ir viršūnė turi vartotojo susietas savybes. Lygiagrečios briaunos leidžia kelissantykiai tarp tų pačių viršūnių.
„Spark GraphX“ funkcijos
Toliau pateikiamos „Spark GraphX“ funkcijos:
- Lankstumas :
„Spark GraphX“ veikia ir su grafikais, ir su skaičiavimais. „GraphX“ vienoje sistemoje suvienija ETL („Extract, Transform & Load“), tiriamąją analizę ir iteracinį grafiko skaičiavimą. Mes galime peržiūrėti tuos pačius duomenis kaip grafikus ir kolekcijas, efektyviai transformuoti ir sujungti grafikus su RDD ir rašyti pasirinktinius iteracinius grafikų algoritmus naudodami „Pregel“ API. - Greitis :
„Spark GraphX“ užtikrina palyginamą našumą su greičiausiomis specializuotomis grafikų apdorojimo sistemomis. Tai galima palyginti su greičiausiomis grafikų sistemomis, išlaikant „Spark“ lankstumą, toleranciją triktims ir paprastą naudojimą. - Augančio algoritmo biblioteka :
Galime pasirinkti iš vis didėjančios grafikų algoritmų bibliotekos, kurią siūlo „Spark GraphX“. Kai kurie iš populiariausių algoritmų yra puslapio reitingas, prijungti komponentai, etikečių platinimas, SVD ++, stipriai susiję komponentai irtrikampių skaičius.
Suprasti „GraphX“ su pavyzdžiais
Dabar naudodamiesi pavyzdžiu suprasime „Spark GraphX“ sąvokas. Panagrinėkime paprastą grafiką, kaip parodyta paveikslėlyje žemiau.
Paveikslėlis: „Spark GraphX“ pamoka - diagramos pavyzdys
Žvelgdami į grafiką galime išgauti informaciją apie žmones (viršūnes) ir jų tarpusavio santykius (kraštus). Čia pateiktoje diagramoje pateikiami „Twitter“ vartotojai ir jų stebimi „Twitter“. Pavyzdžiui, Bobas seka Davide'ą ir Alice'ą „Twitter“ tinkle.
Įgyvendinkime tą patį naudodami „Apache Spark“. Pirmiausia importuosime reikalingas „GraphX“ klases.
// Reikiamų klasių importavimas importuoti org.apache.spark._ importuoti org.apache.spark.rdd.RDD importuoti org.apache.spark.util.IntParam importuoti org.apache.spark.graphx._ importuoti org.apache.spark .graphx.util.GraphGeneratoriai
Rodomos viršūnės :Dabar mes parodysime visus vartotojų vardus ir amžių (viršūnes).
val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val graph: Graph [(String, Int), Int] = Grafikas (vertexRDD, edgeRDD) graph.vertices.filter {atvejis (id, (vardas, amžius)) => amžius> 30} .collect.foreach {atvejis (id, (vardas, amžius)) => println ( „$ name is $ age“)}
Minėto kodo išvestis yra tokia:
Deividasyra42 Franasyrapenkiasdešimt Redyra55 Čarlisyra65
Rodomi kraštai : Pažvelkime, kuris žmogus kam patinka „Twitter“.
už (tripletas<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') }
Minėto kodo išvestis yra tokia:
fibonacci c ++ kodas
BobasmėgstaAlisa BobasmėgstaDeividas ČarlismėgstaBobas ČarlismėgstaFranas DeividasmėgstaAlisa RedmėgstaBobas RedmėgstaČarlis RedmėgstaFranas
Dabar, kai supratome „GraphX“ pagrindus, pasinerkime šiek tiek giliau ir atlikime keletą patobulintų skaičiavimų tuo pačiu.
Stebėtojų skaičius : Kiekvienas mūsų diagramos vartotojas turi skirtingą stebėtojų skaičių. Pažvelkime į visus kiekvieno vartotojo stebėtojus.
// Apibrėžiant klasę, kad būtų aiškiau modeliuota vartotojo ypatybių atvejo klasė „User“ (vardas: String, age: Int, inDeg: Int, outDeg: Int) // Vartotojo grafiko sukūrimas val initialUserGraph: Graph [User, Int] = graph. mapVertices {atvejis (id, (vardas, amžius)) => Vartotojas (vardas, amžius, 0, 0)} // Informacijos apie laipsnius užpildymas val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Vartotojas (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {atvejis (id, u, outDegOpt) => Vartotojas (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} ((id, nuosavybė)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') }
Minėto kodo išvestis yra tokia:
Vartotojas vienasvadinamasAlisair patinka2žmonių. Vartotojas 2vadinamasBobasir patinka2žmonių. Vartotojas 3vadinamasČarlisir patinkavienasžmonių. Vartotojas 4vadinamasDeividasir patinkavienasžmonių. Vartotojas 5vadinamasRedir patinka0žmonių. Vartotojas 6vadinamasFranasir patinka2žmonių.
Seniausi pasekėjai : Mes taip pat galime rūšiuoti sekėjus pagal jų savybes. Suraskime seniausius kiekvieno vartotojo stebėtojus pagal amžių.
// Seniausio sekėjo radimas kiekvienam vartotojui val seenFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Kiekvienam kraštui išsiųskite pranešimą į paskirties viršūnę su šaltinio atributu viršūnės kraštas => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Norėdami sujungti pranešimus, paimkite pranešimą vyresniajam sekėjui (a, b) => if (a. _2> b._2) a kitas b)
Minėto kodo išvestis yra tokia:
Deividasyra vyriausiasisAlisa. Čarlisyra vyriausiasisBobas. Redyra vyriausiasisČarlis. Bobasyra vyriausiasisDeividas. Redneturi savo pasekėjų. Čarlisyra vyriausiasisFranas.
Naudojimo atvejis: Skrydžio duomenų analizė naudojant „Spark GraphX“
Dabar, kai supratome pagrindines „Spark GraphX“ sąvokas, išspręskime realaus gyvenimo problemas naudodami „GraphX“. Tai padės mums pasitikėti, kad ateityje galėtume dirbti su bet kokiais „Spark“ projektais.
Problemos pareiškimas : Norėdami analizuoti realaus laiko skrydžio duomenis naudodami „Spark GraphX“, pateikite beveik realiu laiku atliekamus skaičiavimo rezultatus ir vizualizuokite rezultatus naudodami „Google Data Studio“.
Naudojimo atvejis - reikia atlikti skaičiavimus :
- Apskaičiuokite bendrą skrydžių maršrutų skaičių
- Apskaičiuokite ir rūšiuokite ilgiausius skrydžio maršrutus
- Rodyti oro uostą su aukščiausio laipsnio viršūne
- Išvardinkite svarbiausius oro uostus pagal „PageRank“
- Išvardykite maršrutus, kurių skrydžio išlaidos yra mažiausios
Aukščiau nurodytiems skaičiavimams naudosime „Spark GraphX“ ir vizualizuosime rezultatus naudodami „Google Data Studio“.
Naudojimo atvejis - duomenų rinkinys :
Paveikslėlis: Naudojimo atvejis - JAV skrydžio duomenų rinkinys
Naudojimo atvejis - srauto diagrama :
Ši iliustracija aiškiai paaiškina visus mūsų skrydžio duomenų analizės veiksmus.
Paveikslėlis: Naudojimo atvejis - Skrydžio duomenų analizės, naudojant „Spark GraphX“, schema
Naudojimo atvejis - kibirkščių įgyvendinimas :
Eime į priekį, dabar įgyvendinkime savo projektą naudodami „Eclipse IDE for Spark“.
Žemiau rasite pseudo kodą:
// Reikiamų klasių importavimas importuokite org.apache.spark._ ... importuokite java.io.File objekto oro uostą {def main (args: Array [String]) {// Case Case Flight kūrimas Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Parse String funkcijos nustatymas, norint išanalizuoti įvestį į Flight klasės def parseFlight (str: String): Flight = {val line = str.split (',') Flight (eilutė (0), eilutė (1), ..., eilutė (16) .toInt)} val conf = nauja „SparkConf“ (). setAppName ('oro uostas'). setMaster ('vietinis [2]') val sc = nauja „SparkContext“ (conf) // Įkelkite duomenis į RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // CSV linijų RDD analizuokite į skrydžio klasių RDD skrydžiaiRDD = Žemėlapio „ParseFlight“ į teksto RDD // Sukurti RDD oro uostus su ID ir pavadinimu val oro uostai = Žemėlapio skrydžio OriginID ir Origin oro uostai.take (1) // Numatytosios viršūnės, vadinamos niekur, apibrėžimas ir oro uosto ID priskyrimas spausdintuvams val nowhere = 'nowhere' val airportMap = Naudoti žemėlapio funkciją .collect.toList.toMap // Kurti maršrutus RDD su sourceID, destinationID ir atstumo val maršrutais = skrydžiaiDRD. Naudokite žemėlapio funkciją .distinct route.take (2) // Sukurkite RDD kraštus su sourceID, destinationID ir atstumu val edge = route.map {(Map OriginID and DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Apibrėžkite grafiką ir parodykite kai kurias viršūnes bei briaunas val graph = Graph (Oro uostai, kraštai ir niekur) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Find bendras oro uostų skaičius val numairports = Vertices Number // Užklausa 2 - Apskaičiuokite bendrą maršrutų skaičių? val numroutes = kraštų skaičius // 3 užklausa - apskaičiuokite tuos maršrutus, kurių atstumas didesnis nei 1 000 mylių graph.edges.filter {Gaukite krašto atstumą) => atstumas> 1000} .take (3) // Panašiai parašykite „Scala“ kodą žemiau užklausų // 4 užklausa - rūšiuokite ir atsispausdinkite ilgiausius maršrutus // 5 užklausa - rodykite aukščiausio laipsnio viršūnes atvykstantiems ir išvykstantiems oro uostų skrydžiams // 6 užklausa - gaukite oro uosto pavadinimą su ID 10397 ir 12478 // 7 užklausa - raskite oro uostas, kuriame skraidoma daugiausia, // 8 užklausa - raskite daugiausiai išvykstančių skrydžių oro uostą // 9 užklausa - raskite svarbiausius oro uostus pagal „PageRank“ // 10 užklausa - rūšiuokite oro uostus pagal reitingą // 11 užklausa - rodykite daugiausiai svarbūs oro uostai // 12 užklausa - raskite maršrutus su mažiausiomis skrydžių kainomis // 13 užklausa - raskite oro uostus ir jų mažiausias skrydžio išlaidas // 14 užklausa - rodykite oro uosto kodus ir surūšiuotas mažiausias skrydžio išlaidas
Naudojimo atvejis - rezultatų vizualizavimas :
Analizei vizualizuoti naudosime „Google Data Studio“. „Google Data Studio“ yra „Google Analytics 360 Suite“ produktas. Pasinaudosime „Geo Map“ paslauga, kad žemėlapiuose nurodytume oro uostus atitinkamose vietose JAV žemėlapyje ir parodytume metrikos kiekį.
- Parodykite bendrą vieno oro uosto skrydžių skaičių
- Parodykite kiekvieno oro uosto paskirties maršrutų metrinę sumą
- Rodyti bendrą visų oro uosto skrydžių vėlavimą
Dabar tai užbaigia „Spark GraphX“ tinklaraštį. Tikiuosi, kad jums patiko ją skaityti ir jums pasirodė informatyvu. Peržiūrėkite kitą mūsų „Apache Spark“ serijos tinklaraštį kad taptų pasirengusi „Apache Spark“ rinkai.
Mes rekomenduojame šiuos veiksmus „Apache Spark“ mokymai Skrydžio duomenų analizės vaizdo įrašas nuo Edurekos, pradedant:
kas yra „blockchain“ kūrėjas
„Apache Spark“ mokymai „Spark GraphX“ skrydžių duomenų analizė Edureka
Turite mums klausimą? Prašau paminėti tai komentarų skiltyje ir mes su jumis susisieksime anksčiausiai.
Jei norite išmokti „Spark“ ir kurti karjerą „Spark“ srityje ir sukaupti žinių, kaip atlikti didelio masto duomenų apdorojimą naudojant RDD, „Spark Streaming“, „SparkSQL“, „MLlib“, „GraphX“ ir „Scala“ su „Real Life“ naudojimo atvejais, peržiūrėkite mūsų interaktyvųjį tiesioginį -prisijungęs čia, su 24 * 7 palaikymu, kuris padės jums mokytis.