Výukový program Spark GraphX ​​- Analýza grafov v Apache Spark



Tento blog s tutoriálom GraphX ​​vám predstaví Apache Spark GraphX, jeho vlastnosti a komponenty vrátane projektu Analýza letových údajov.

GraphX je API Apache Spark pre grafy a paralelné výpočty. GraphX ​​zjednocuje proces ETL (Extract, Transform & Load), prieskumnú analýzu a iteračný výpočet grafov v jednom systéme. Využitie grafov možno vidieť na priateľoch Facebooku, pripojeniach LinkedIn, smerovačoch internetu, vzťahoch medzi galaxiami a hviezdami v astrofyzike a Mapách Google. Aj keď sa koncept výpočtu grafov javí ako veľmi jednoduchý, aplikácie grafov sú doslova neobmedzené, napríklad pri detekcii katastrof, bankovníctve, akciovom trhu, bankovníctve a geografických systémoch.Naučiť sa používať toto API je dôležitou súčasťou .Prostredníctvom tohto blogu sa na príkladoch naučíme koncepty Spark GraphX, jeho funkcií a komponentov a prejdeme si kompletný prípad použitia Flight Data Analytics pomocou GraphX.

java je-vzťah

V tomto blogu Spark GraphX ​​sa budeme venovať nasledujúcim témam:





  1. Čo sú to grafy?
  2. Použite prípady výpočtu grafu
  3. Čo je Spark GraphX?
  4. Funkcie Spark GraphX
  5. Pochopenie GraphX ​​s príkladmi
  6. Použiť prípad - analýzu letových údajov pomocou GraphX

Čo sú to grafy?

Graf je matematická štruktúra rovnajúca sa množine objektov, v ktorej sú niektoré páry objektov v istom zmysle spojené. Tieto vzťahy je možné znázorniť pomocou hrán a vrcholov tvoriacich graf. Vrcholy predstavujú objekty a hrany ukazujú rôzne vzťahy medzi týmito objektmi.

Grafové koncepty - Spark GraphX ​​Tutorial - EdurekaObrázok: Výukový program Spark GraphX ​​- vrcholy, hrany a trojčatá v grafoch



V počítačovej vede je graf abstraktný údajový typ, ktorý je určený na implementáciu neusmerneného grafu a konceptov usmerneného grafu z matematiky, konkrétne z oblasti teórie grafov. Štruktúra dátového grafu môže tiež súvisieť s každou hranou hraničná hodnota , ako napríklad symbolický štítok alebo číselný atribút (cena, kapacita, dĺžka,atď.).

Použite prípady výpočtu grafu

Nasledujúce prípady použitia poskytujú perspektívu do výpočtu grafov a ďalší priestor na implementáciu ďalších riešení pomocou grafov.

  1. Systém detekcie katastrof

    Grafy sa dajú použiť na detekciu katastrof ako hurikány, zemetrasenia, tsunami, lesné požiare a sopky, aby varovali ľudí.



  2. Poradie stránky Page Rank je možné použiť pri hľadaní ovplyvňujúcich osôb v akejkoľvek sieti, ako je napríklad sieť s citáciou papiera alebo sieť sociálnych médií.
  3. Zisťovanie finančných podvodov

    Grafickú analýzu je možné použiť na sledovanie finančných transakcií a detekciu osôb zapojených do finančných podvodov a prania špinavých peňazí.

  4. Obchodné analýzy

    Grafy, ak sa používajú spolu so strojovým učením, pomáhajú pochopiť trendy nákupu zákazníkov. Napr. Uber, McDonald’s atď.

  5. Geografické informačné systémy

    Grafy sa intenzívne používajú na vývoj funkcií geografických informačných systémov, ako je vymedzenie povodí a predpoveď počasia.

  6. Google Pregel

    Pregel je škálovateľná a na chyby odolná platforma spoločnosti Google s API, ktoré je dostatočne flexibilné na vyjadrenie ľubovoľného grafualgoritmy.

Čo je Spark GraphX?

GraphX je Spark API pre grafy a paralelné výpočty. Zahŕňa rastúcu zbierku grafických algoritmov a nástrojov na zjednodušenie úloh analýzy grafov.


GraphX ​​rozširuje Spark RDD o graf pružného distribuovaného majetku.
Graf vlastností je smerovaný multigraf, ktorý môže mať paralelne viac hrán. S každou hranou a vrcholom sú spojené vlastnosti definované používateľom. Rovnobežné hrany umožňujú viacnásobné zväčšenievzťahy medzi rovnakými vrcholmi.

Funkcie Spark GraphX

Nasledujúce sú vlastnosti Spark GraphX:

  1. Flexibilita :
    Spark GraphX ​​pracuje s grafmi aj výpočtami. GraphX ​​zjednocuje ETL (Extract, Transform & Load), prieskumnú analýzu a iteratívny výpočet grafov v jednom systéme. Môžeme zobraziť rovnaké údaje ako grafy aj kolekcie, efektívne transformovať a spájať grafy s RDD a písať vlastné iteračné algoritmy grafov pomocou Pregel API.
  2. Rýchlosť :
    Spark GraphX ​​poskytuje porovnateľný výkon s najrýchlejšími špecializovanými systémami na spracovanie grafov. Je porovnateľný s najrýchlejšími grafovými systémami, pričom si zachováva flexibilitu, odolnosť voči chybám a jednoduché použitie spoločnosti Spark.
  3. Rastúca knižnica algoritmov :
    Môžeme si vybrať z rastúcej knižnice grafových algoritmov, ktoré ponúka Spark GraphX. Niektoré z populárnych algoritmov sú poradie stránok, pripojené komponenty, šírenie štítkov, SVD ++, silne prepojené komponenty apočet trojuholníkov.

Pochopenie GraphX ​​s príkladmi

Teraz pochopíme pojmy Spark GraphX ​​na príklade. Uvažujme o jednoduchom grafe, ako je znázornený na obrázku nižšie.

Obrázok: Výukový program Spark GraphX ​​- príklad grafu

Pri pohľade na graf môžeme extrahovať informácie o ľuďoch (vrcholy) a vzťahoch medzi nimi (hrany). Tento graf predstavuje používateľov Twitteru, ktorých sledujú na Twitteri. Pre napr. Bob sleduje Davide a Alice na Twitteri.

Implementujme to isté pomocou Apache Spark. Najskôr importujeme potrebné triedy pre GraphX.

// Import potrebných tried 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

Zobrazujú sa vrcholy :Ďalej teraz zobrazíme všetky mená a vek používateľov (vrcholy).

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val graf: Graph [(String, Int), Int] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => age> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ meno je $ vek')}

Výstup pre vyššie uvedený kód je uvedený nižšie:

Dávidje42 Franjepäťdesiat Edje55 Charlieje65

Zobrazujú sa okraje : Pozrime sa, ktorá osoba sa komu páči na Twitteri.

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

Výstup pre vyššie uvedený kód je uvedený nižšie:

Bobmá rádAlice Bobmá rádDávid Charliemá rádBob Charliemá rádFran Dávidmá rádAlice Edmá rádBob Edmá rádCharlie Edmá rádFran

Teraz, keď sme pochopili základy GraphX, poďme sa ponoriť trochu hlbšie a vykonať rovnaké pokročilé výpočty.

Počet sledovateľov : Každý používateľ v našom grafe má iný počet sledovateľov. Pozrime sa na všetkých sledovateľov každého používateľa.

// Definovanie triedy pre jasnejšie modelovanie používateľskej triedy prípadových vlastností User (meno: String, age: Int, inDeg: Int, outDeg: Int) // Vytvorenie používateľa Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Vyplnenie informácií o stupni userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Používateľ (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Používateľ (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} pre ((id, vlastnosť)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Výstup pre vyššie uvedený kód je uvedený nižšie:

Používateľ jedensa voláAlicea páči sa mu2ľudí. Používateľ 2sa voláBoba páči sa mu2ľudí. Používateľ 3sa voláCharliea páči sa mujedenľudí. Používateľ 4sa voláDávida páči sa mujedenľudí. Používateľ 5sa voláEda páči sa mu0ľudí. Používateľ 6sa voláFrana páči sa mu2ľudí.

Najstarší nasledovníci : Sledovateľov môžeme tiež triediť podľa charakteristík. Nájdeme najstarších sledovateľov každého používateľa podľa veku.

// Nájdenie najstaršieho sledovateľa pre každého používateľa najstaršie Nasledovník: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Pre každú hranu odošlite správu do cieľového vrcholu s atribútom zdroja vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Ak chcete kombinovať správy, vezmite správu pre staršieho nasledovníka (a, b) => if (a. _2> b._2) a iné b)

Výstup pre vyššie uvedený kód je uvedený nižšie:

Dávidje najstarším nasledovníkomAlice. Charlieje najstarším nasledovníkomBob. Edje najstarším nasledovníkomCharlie. Bobje najstarším nasledovníkomDávid. Ednemá žiadnych sledovateľov. Charlieje najstarším nasledovníkomFran. 

Prípad použitia: Analýza letových údajov pomocou programu Spark GraphX

Teraz, keď sme pochopili základné koncepty Spark GraphX, vyriešime skutočný problém pomocou GraphX. To nám pomôže dať dôveru v prácu na akýchkoľvek projektoch Spark v budúcnosti.

Vyhlásenie o probléme : Ak chcete analyzovať údaje o letu v reálnom čase pomocou programu Spark GraphX, poskytnite výsledky výpočtu takmer v reálnom čase a vizualizujte ich pomocou aplikácie Google Data Studio.

ako inicializovať triedu v pythone -

Použiť prípad - je potrebné vykonať výpočty :

  1. Vypočítajte celkový počet letových trás
  2. Spočítajte a zoraďte najdlhšie letové trasy
  3. Zobrazte letisko s vrcholom najvyššieho stupňa
  4. Zoznam najdôležitejších letísk podľa PageRank
  5. Uveďte zoznam trás s najnižšími letovými nákladmi

Na vyššie uvedené výpočty použijeme program Spark GraphX ​​a výsledky vizualizujeme pomocou nástroja Google Data Studio.

Prípad použitia - množina údajov :

Obrázok: Použite prípad - letový súbor údajov USA

Vývojový diagram prípadu použitia :

Nasledujúca ilustrácia jasne vysvetľuje všetky kroky spojené s našou analýzou letových údajov.

Obrázok: Prípad použitia - Vývojový diagram analýzy letových údajov pomocou programu Spark GraphX

Prípad použitia - implementácia Spark :

Poďme teraz realizovať náš projekt pomocou Eclipse IDE pre Spark.

Pseudokód nájdete nižšie:

// Import potrebných tried import org.apache.spark._ ... import java.io.File objektu letisko {def main (args: Array [String]) {// Vytvorenie triedy prípadov Letová trieda prípadov Letová trieda (dofM: String, dofW: String, ..., dist: Int) // Definovanie funkcie Parse String na analýzu vstupu do triedy Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (riadok (0), riadok (1), ..., riadok (16) .toInt)} val conf = nový SparkConf (). setAppName ('letisko'). setMaster ('local [2]') val sc = new SparkContext (conf) // Načítanie údajov do RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analyzovať RDD liniek CSV do RDD letových tried val flightRDD = Mapa ParseFlight na text RDD // Vytvorenie letísk RDD s ID a Name val letiskami = Mapa letu OriginID a Origin airports.take (1) // Definovanie predvoleného vrcholu zvaného nikde a mapovanie ID letiska pre printlns val nowhere = 'nowhere' val airportMap = Použiť funkciu mapy .collect.toList.toMap // Vytváranie trás RDD s sourceID, destinationID a distance val trasy = letyRDD. Použite funkciu Map .výrazné trasy.take (2) // Vytvorte hrany RDD pomocou sourceID, destinationID a distance val edge = routes.map {(Map OriginID a DestinationID) => Edge (org_id.toLong, dest_id.toLong, vzdialenosť)} edge.take (1) // Definujte graf a zobrazte niektoré vrcholy a hrany val graph = Graph (Letiská, Hrany a Nikde) graph.vertices.take (2) graph.edges.take (2) // Dotaz 1 - Nájsť celkový počet letísk val numairports = Vertices Number // Dotaz 2 - Vypočítať celkový počet trás? val numroutes = Počet okrajov // Dotaz 3 - Vypočítajte tieto trasy so vzdialenosťami viac ako 1 000 míľ graph.edges.filter {Získajte vzdialenosť od okraja) => vzdialenosť> 1000}. Take (3) // Podobne napíšte kód Scala pre pod dotazmi // Dotaz 4 - Zoradenie a tlač najdlhších trás // Dotaz 5 - Zobrazenie vrcholov najvyššieho stupňa pre prichádzajúce a odchádzajúce lety z letísk // Dotaz 6 - Získajte názov letiska s ID 10397 a 12478 // Dotaz 7 - Nájdite letisko s najvyššími prichádzajúcimi letmi // Dotaz 8 - Nájdite letisko s najvyššími odletovými letmi // Dotaz 9 - Nájdite najdôležitejšie letiská podľa PageRank // Dotaz 10 - Zoradiť letiská podľa poradia // Dotaz 11 - Zobraziť najviac dôležité letiská // Dotaz 12 - Nájdite trasy s najnižšími letovými nákladmi // Dotaz 13 - Vyhľadajte letiská a ich najnižšie náklady na let // Dotaz 14 - Zobrazte kódy letísk spolu s zoradenými najnižšími letovými nákladmi

Prípad použitia - vizualizácia výsledkov :

Na vizualizáciu našej analýzy budeme používať Google Data Studio. Dátové štúdio Google je produkt patriaci do balíka Google Analytics 360. Službu Geo Map použijeme na mapovanie letísk na ich príslušné miesta na mape USA a zobrazenie množstva metrík.

čo je inštancia java
  1. Zobraziť celkový počet letov na letisko
  2. Zobraziť metrický súčet cieľových trás z každého letiska
  3. Zobraziť celkové meškanie všetkých letov na letisko

Týmto sa uzatvára blog Spark GraphX. Dúfam, že ste si ho prečítali radi a považovali ste ho za poučný. Prezrite si ďalší blog v našej sérii Apache Spark stať sa pripraveným na trh v Apache Spark.

Odporúčame nasledovné Školenie Apache Spark Video s analýzou letových údajov z Edureky na začiatok:

Školenie Apache Spark Analýza letových údajov Spark GraphX ​​| Edureka

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme najskôr.

Ak sa chcete naučiť Spark a budovať si kariéru v doméne Spark a budovať odborné znalosti na vykonávanie rozsiahleho spracovania údajov pomocou RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​a Scala s prípadmi použitia v reálnom živote, pozrite si naše interaktívne, živé - online tu, ktorá je dodávaná s podporou 24 * 7, ktorá vás prevedie celým vzdelávacím obdobím.