Spark GraphX ​​oktatóanyag - Grafikonelemzés az Apache Sparkban

Ez a GraphX ​​bemutató blog bemutatja az Apache Spark GraphX-et, annak jellemzőit és összetevőit, beleértve a Repülési adatok elemzése projektet.

GraphX az Apache Spark grafikonokra és párhuzamos számításokra szolgáló API-ja. A GraphX ​​egységesíti az ETL (Extract, Transform & Load) folyamatot, a feltáró elemzést és az iteratív gráfszámítást egyetlen rendszeren belül. A grafikonok használata látható a Facebook barátaiban, a LinkedIn kapcsolataiban, az internet útválasztóiban, a galaxisok és a csillagok viszonyában az asztrofizikában és a Google Térképben. Annak ellenére, hogy a grafikonszámítás fogalma nagyon egyszerűnek tűnik, a grafikonok alkalmazása szó szerint korlátlan, a katasztrófa-észlelés, a banki tevékenység, a tőzsde, a banki és a földrajzi rendszerek esetében csak néhányat említünk.Az API használatának megtanulása fontos része az .Ezen a blogon keresztül példákon keresztül megismerhetjük a Spark GraphX ​​fogalmait, jellemzőit és összetevőit, és áttekinthetjük a Flight Data Analytics teljes felhasználási esetét a GraphX ​​segítségével.



A Spark GraphX ​​blogban a következő témákkal foglalkozunk:



  1. Mik azok a grafikonok?
  2. Használja a gráfszámítás eseteit
  3. Mi az a Spark GraphX?
  4. Spark GraphX ​​funkciók
  5. A GraphX ​​megértése példákkal
  6. Használjon esetet - Repülési adatok elemzése a GraphX ​​segítségével

Mik azok a grafikonok?

A Graph egy matematikai szerkezet, amely objektumok halmazának felel meg, amelyben az objektumok néhány párja bizonyos értelemben összefügg. Ezek a kapcsolatok ábrázolhatók grafikonokat alkotó élekkel és csúcsokkal. A csúcsok az objektumokat, az élek pedig az objektumok közötti különböző kapcsolatokat mutatják be.

Grafikon fogalmak - Spark GraphX ​​bemutató - EdurekaÁbra: Spark GraphX ​​oktatóanyag - csúcsok, élek és hármasok grafikonokban



A számítástechnikában a gráf egy absztrakt adattípus, amelynek célja a nem irányított gráf és a matematika irányított gráffogalmai megvalósítása, konkrétan a gráfelmélet területe. A grafikon adatstruktúrája egyes élekhez is társulhat élérték , például egy szimbolikus címke vagy egy numerikus attribútum (költség, kapacitás, hosszúság, stb.).

Használja a gráfszámítás eseteit

A következő felhasználási esetek perspektívát adnak a gráf kiszámításához és további teret engednek más megoldások megvalósításához grafikonok segítségével.

  1. Katasztrófavédelmi rendszer

    A grafikonok felhasználhatók olyan katasztrófák felderítésére, mint a hurrikánok, földrengések, szökőár, erdőtüzek és vulkánok, hogy figyelmeztetéseket adhassanak az emberek riasztására.



    pass by value és pass by referencia java
  2. Page Rank A Page Rank felhasználható bármely hálózatban, például papír-idéző ​​vagy közösségi média-hálózatokban az influencerek megtalálásához.
  3. Pénzügyi csalások felderítése

    A grafikonelemzés felhasználható a pénzügyi tranzakciók nyomon követésére és a pénzügyi csalásokban és pénzmosásban érintett személyek felderítésére.

  4. Üzleti elemzés

    A Grafikonok, ha a Gépi tanulással együtt használják, segítenek megérteni az ügyfelek vásárlási trendjeit. Például. Uber, McDonald’s stb.

  5. Földrajzi információs rendszerek

    A grafikonokat intenzíven használják olyan funkciók fejlesztésére a földrajzi információs rendszereken, mint a vízválasztó körvonal és az időjárás-előrejelzés.

  6. Google Pregel

    A Pregel a Google méretezhető és hibatűrő platformja, API-val, amely elég rugalmas ahhoz, hogy tetszőleges grafikont fejezzen ki algoritmusok.

Mi az a Spark GraphX?

GraphX a Spark API grafikonokhoz és gráfokkal párhuzamos számításokhoz. Ez magában foglalja a grafikonalgoritmusok és az építők növekvő gyűjteményét a gráfelemzési feladatok egyszerűsítése érdekében.


A GraphX ​​kiterjeszti a Spark RDD-t egy Rugalmas elosztott tulajdonság-gráffal.
A tulajdonsággráf egy irányított multigráf, amelynek több éle is lehet párhuzamosan. Minden élhez és csúcshoz a felhasználó által meghatározott tulajdonságok társulnak. A párhuzamos élek többszöröset tesznek lehetővé kapcsolatok ugyanazok a csúcsok között.

Spark GraphX ​​funkciók

A Spark GraphX ​​jellemzői a következők:

  1. Rugalmasság :
    A Spark GraphX ​​grafikonokkal és számításokkal egyaránt működik. A GraphX ​​egyesíti az ETL-t (Extract, Transform & Load), a feltáró elemzést és az iteratív gráfszámítást egyetlen rendszeren belül. Megtekinthetjük ugyanazokat az adatokat, mint a grafikonok és a gyűjtemények, hatékonyan átalakíthatjuk és összekapcsolhatjuk a grafikonokat az RDD-kkel, és egyedi iteratív gráfalgoritmusokat írhatunk a Pregel API segítségével.
  2. Sebesség :
    A Spark GraphX ​​összehasonlítható teljesítményt nyújt a leggyorsabb speciális grafikonfeldolgozó rendszerekkel. Összehasonlítható a leggyorsabb grafikonrendszerekkel, miközben megőrzi a Spark rugalmasságát, hibatűrését és egyszerű használatát.
  3. Növekvő algoritmus könyvtár :
    A Spark GraphX ​​által kínált növekvő gráfalgoritmus-könyvtárból választhatunk. Néhány népszerű algoritmus: oldalrang, összekapcsolt komponensek, címkeszaporítás, SVD ++, erősen összekapcsolt komponensek és háromszögszám.

A GraphX ​​megértése példákkal

Most egy példa segítségével megértjük a Spark GraphX ​​fogalmait. Vegyünk egy egyszerű grafikont az alábbi képen látható módon.

Ábra: Spark GraphX ​​bemutató - grafikon példa

A grafikonra nézve információkat nyerhetünk ki az emberekről (csúcsok) és a köztük lévő kapcsolatokról (élek). Az itt látható grafikon a Twitter-felhasználókat és azokat követi a Twitteren. Például Bob követi Davide-t és Alice-t a Twitteren.

Végezzük el ugyanezt az Apache Spark segítségével. Először importáljuk a GraphX-hez szükséges osztályokat.

// A szükséges osztályok importálása 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

A csúcsok megjelenítése :Ezenkívül megjeleníti a felhasználók összes nevét és életkorát (csúcspontokat).

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val grafikon: Graph [(String, Int), Int] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (név, életkor)) => age> 30} .collect.foreach {case (id, (név, életkor)) => println ( s '$ name is $ age')}

A fenti kód kimenete a következő:

Davidvan42 Franvanötven Edvan55 Charlievan65

Élek megjelenítése : Nézzük meg, melyik ember kit szeret a Twitteren.

mert (hármas<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

A fenti kód kimenete a következő:

BobkedveliAlice BobkedveliDavid CharliekedveliBob CharliekedveliFran DavidkedveliAlice EdkedveliBob EdkedveliCharlie EdkedveliFran

Most, hogy megértettük a GraphX ​​alapjait, merüljünk el egy kicsit mélyebben, és hajtsunk végre néhány fejlett számítást ugyanazon a területen.

Követők száma : A grafikonunkon szereplő minden felhasználónak különböző számú követője van. Nézzük meg minden felhasználó minden követőjét.

// Osztály meghatározása a felhasználói tulajdonság esetosztályának egyértelműbb modellezéséhez Felhasználó (név: String, age: Int, inDeg: Int, outDeg: Int) // Felhasználói grafikon létrehozása val initialUserGraph: Graph [User, Int] = graph. mapVertices {eset (id, (név, életkor)) => Felhasználó (név, életkor, 0, 0)} // A diplomadatok kitöltése val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Felhasználó (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Felhasználó (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} for ((id, tulajdonság)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

A fenti kód kimenete a következő:

Felhasználó egynak, nek hívjákAliceés tetszik neki2emberek. Felhasználó 2nak, nek hívjákBobés tetszik neki2emberek. Felhasználó 3nak, nek hívjákCharlieés tetszik nekiegyemberek. Felhasználó 4nak, nek hívjákDavidés tetszik nekiegyemberek. Felhasználó 5.nak, nek hívjákEdés tetszik neki0emberek. Felhasználó 6.nak, nek hívjákFranés tetszik neki2emberek.

Legidősebb követők : A követőket jellemzőik szerint is rendezhetjük. Keressük meg az egyes felhasználók legidősebb követőit életkor szerint.

// A legrégebbi követő megkeresése minden felhasználó számára val elderFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Minden élhez küldjön üzenetet a célcsúcshoz a forrás attribútumával csúcsszél = = Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Üzenetek kombinálásához vegye az üzenetet a régebbi követõnek (a, b) => if (a. _2> b._2) a másik b)

A fenti kód kimenete a következő:

Davida legrégebbi követőjeAlice. Charliea legrégebbi követőjeBob. Eda legrégebbi követőjeCharlie. Boba legrégebbi követőjeDavid. Ednincs híve. Charliea legrégebbi követője  Fran. 

Felhasználási eset: Repülési adatok elemzése a Spark GraphX ​​segítségével

Most, hogy megértettük a Spark GraphX ​​alapfogalmait, oldjunk meg egy valós problémát a GraphX ​​segítségével. Ez segíteni fog bennünket abban, hogy a jövőben bármilyen Spark-projekten dolgozhassunk.

mi a java-ban hashset

Probléma nyilatkozat : A valós idejű repülési adatok elemzéséhez a Spark GraphX ​​segítségével közöljön valós idejű számítási eredményeket, és vizualizálja az eredményeket a Google Data Studio segítségével.

Felhasználási eset - elvégzendő számítások :

  1. Számítsa ki a repülési útvonalak teljes számát
  2. Számítsa ki és rendezze a leghosszabb repülési útvonalakat
  3. A legmagasabb fokú csúccsal rendelkező repülőtér megjelenítése
  4. Sorolja fel a legfontosabb repülőtereket a PageRank szerint
  5. Sorolja fel a legalacsonyabb repülési költségű útvonalakat

A Spark GraphX-et fogjuk használni a fenti számításokhoz, és az eredményeket a Google Data Studio segítségével jelenítjük meg.

Use Case - Dataset :

Ábra: Felhasználási eset - USA repülési adatkészlet

Felhasználási eset - folyamatábra :

Az alábbi ábra világosan elmagyarázza a repülési adatok elemzésének összes lépését.

hogyan kell használni a split módszert a java-ban

Ábra: Felhasználási eset - A repülési adatok elemzésének folyamatábrája a Spark GraphX ​​segítségével

Használat - Spark megvalósítás :

Haladva haladjon most végre az Eclipse IDE for Spark alkalmazásával.

Az alábbiakban keresse meg az álkódot:

// A szükséges osztályok importálása import org.apache.spark._ ... import java.io.File objektum repülőtér {def main (args: Array [String]) {// Case Case osztály létrehozása Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Elemző karakterlánc függvény meghatározása a bemeneti elemzéshez a Flight osztály def parseFlight (str: String): Repülés = {val line = str.split (',') Flight (line (0), line (1), ..., line (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = új SparkContext (conf) // Betölti az adatokat egy RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // A CSV vonalak RDD elemzése a val repülési osztályok RDD-jébe flightRDD = Térkép ParseFlight szöveges RDD-hez // Repülőterek RDD létrehozása azonosítóval és névvel val repülőterek = Térkép Repülés OriginID és Origin repülőterek.take (1) // A sehova nevezett alapértelmezett csúcs meghatározása és a repülési azonosító feltérképezése a printlns számára val nowhere = 'nowhere' val airportMap = A Map Function használata .collect.toList.toMap // Útvonalak létrehozása RDD sourceID, destinationID és distance val útvonalakkal = flightRDD. Használja a Map Function lehetőséget .distinct route.take (2) // RDD élek létrehozása a forrásazonosítóval, a célazonosítóval és a távolság val élekkel = útvonalak.map {(Map OriginID és DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Határozza meg a grafikont, és jelenítsen meg néhány csúcsot és élt val graph = Graph (Grafikon (Repülőterek, Élek és Sehol) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Find a repülőterek összes száma val numairports = Vertices Number // Lekérdezés 2 - Számolja ki az útvonalak teljes számát? val numroutes = Élek száma // 3. lekérdezés - Számítsa ki azokat az útvonalakat, amelyek távolsága meghaladja az 1000 mérföldet graph.edges.filter {Szerezze meg az éltávolságot = = távolság> 1000} .take (3) // Hasonlóképpen írjon Scala kódot a lekérdezések alatt // 4. lekérdezés - A leghosszabb útvonalak rendezése és kinyomtatása // 5. lekérdezés - A legmagasabb fokú csúcsok megjelenítése a repülőterek bejövő és kimenő járatainál // 6. lekérdezés - A repülőtér nevének megszerzése az 10397 és 12478 azonosítójú azonosítókkal // 7. lekérdezés - Keresse meg a a legmagasabb bejövő járatokkal rendelkező repülőtér // 8. lekérdezés - Keresse meg a legnagyobb kimenő járattal rendelkező repülőteret // 9. lekérdezés - Keresse meg a legfontosabb repülőtereket a PageRank szerint // Lekérdezés 10 - Rendezze a repülőtéreket rangsor szerint // Lekérdezés 11 - A legtöbb megjelenítése fontos repülőterek // 12. lekérdezés - Keresse meg a legalacsonyabb repülési költségekkel járó útvonalakat // 13. lekérdezés - Keresse meg a repülőtereket és a legalacsonyabb repülési költségeket // 14. lekérdezés - A repülőtéri kódok megjelenítése a válogatott legalacsonyabb repülési költségekkel együtt

Felhasználási eset - eredmények megjelenítése :

Elemzésünk megjelenítéséhez a Google Data Stúdiót fogjuk használni. A Google Data Studio a Google Analytics 360 Suite termék. A Geo Map szolgáltatást fogjuk használni, hogy feltérképezzük a repülőtereket az USA térképén, és megmutassuk a mutatók mennyiségét.

  1. Mutasd meg a repülések szerinti összes járat számát
  2. Jelenítse meg a célállomás útvonalainak metrikus összegét minden repülőtérről
  3. Jelenítse meg az összes járat repülésenkénti késését

Ezzel befejeződött a Spark GraphX ​​blog. Remélem tetszett olvasni és informatívnak találta. Nézze meg az Apache Spark sorozat következő blogját hogy piacra kész legyen az Apache Sparkban.

A következőket javasoljuk Apache Spark Training | Repülési adatok elemzése videó Edurekától kezdve:

Apache Spark Training | Spark GraphX ​​repülési adatok elemzése | Edureka

Van egy kérdésünk? Kérjük, említse meg a megjegyzések részben, és leghamarabb kapcsolatba lépünk Önnel.

Ha meg akarja tanulni a Sparkot, és karriert szeretne kialakítani a Spark területén, és szakértelmet szeretne felépíteni az RDD, a Spark Streaming, a SparkSQL, az MLlib, a GraphX ​​és a Scala segítségével valós idejű használati esetekkel végzett nagyméretű adatfeldolgozáshoz, nézze meg interaktív, élő adatainkat -online itt, 24 * 7 támogatással jár, amely végigvezeti Önt a tanulási időszak alatt.