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



Tento blog GraphX ​​Tutorial vám představí Apache Spark GraphX, jeho funkce a komponenty včetně projektu Analýza letových dat.

GraphX je API Apache Spark pro grafy a paralelní výpočet. GraphX ​​sjednocuje proces ETL (Extract, Transform & Load), průzkumnou analýzu a iterativní výpočet grafů v rámci jednoho systému. Využití grafů lze vidět u přátel Facebooku, připojení LinkedIn, směrovačů internetu, vztahů mezi galaxiemi a hvězdami v astrofyzice a Mapách Google. I když se koncept výpočtu grafů jeví jako velmi jednoduchý, použití grafů je doslova neomezené, s případy použití v detekci katastrof, bankovnictví, akciovém trhu, bankovnictví a geografických systémech.Naučit se používat toto API je důležitou součástí .Prostřednictvím tohoto blogu se na příkladech seznámíme s koncepty Spark GraphX, jeho funkcemi a komponentami a projdeme si kompletní případ použití Flight Data Analytics pomocí GraphX.

třída úložiště c ++

V tomto blogu Spark GraphX ​​se budeme věnovat následujícím tématům:





  1. Co jsou to grafy?
  2. Použijte případy výpočtu grafu
  3. Co je Spark GraphX?
  4. Funkce Spark GraphX
  5. Porozumění GraphX ​​s příklady
  6. Použít případ - Analýza letových dat pomocí GraphX

Co jsou to grafy?

Graf je matematická struktura ve výši množiny objektů, ve kterých jsou některé páry objektů v určitém smyslu příbuzné. Tyto vztahy lze reprezentovat pomocí hran a vrcholů tvořících graf. Vrcholy představují objekty a hrany ukazují různé vztahy mezi těmito objekty.

Koncepty grafů - Výukový program Spark GraphX ​​- EdurekaPostava: Výukový program Spark GraphX ​​- vrcholy, hrany a trojice v grafech



V informatice je graf abstraktním datovým typem, který je určen k implementaci neorientovaného grafu a konceptů řízeného grafu z matematiky, konkrétně z oblasti teorie grafů. Struktura dat grafu může také přidružit každou hranu hranová hodnota , například symbolický štítek nebo číselný atribut (cena, kapacita, délka,atd.).

Použijte případy výpočtu grafu

Následující případy použití dávají perspektivu do výpočtu grafů a další rozsah implementace dalších řešení pomocí grafů.

  1. Systém detekce katastrof

    Grafy lze použít k detekci katastrof, jako jsou hurikány, zemětřesení, tsunami, lesní požáry a sopky, aby varovaly lidi.



  2. Hodnocení stránky Page Rank lze použít při hledání ovlivňujících v jakékoli síti, jako je například síť s citací papíru nebo sociální síť.
  3. Detekce finančních podvodů

    Analýzu grafů lze použít ke sledování finančních transakcí a detekci osob zapojených do finančních podvodů a praní peněz.

  4. Obchodní analýzy

    Pokud jsou grafy použity společně se strojovým učením, pomáhá pochopit trendy nákupu zákazníků. Např. Uber, McDonald’s atd.

  5. Geografické informační systémy

    Grafy se intenzivně používají k vývoji funkcí geografických informačních systémů, jako je vymezení povodí a předpověď počasí.

  6. Google Pregel

    Pregel je škálovatelná a odolná vůči chybám platforma Google s API, které je dostatečně flexibilní na vyjádření libovolného grafualgoritmy.

Co je Spark GraphX?

GraphX je Spark API pro grafy a paralelní výpočet. Zahrnuje rostoucí sbírku grafových algoritmů a nástrojů pro zjednodušení analytických úloh grafů.


GraphX ​​rozšiřuje Spark RDD o odolný distribuovaný graf vlastností.
Graf vlastností je směrovaný multigraf, který může mít více hran paralelně. Každá hrana a vrchol mají přidružené vlastnosti definované uživatelem. Paralelní hrany umožňují vícevztahy mezi stejnými vrcholy.

Funkce Spark GraphX

Níže jsou uvedeny vlastnosti Spark GraphX:

  1. Flexibilita :
    Spark GraphX ​​pracuje s grafy i výpočty. GraphX ​​sjednocuje ETL (Extract, Transform & Load), průzkumnou analýzu a iterativní výpočet grafů v rámci jednoho systému. Můžeme zobrazit stejná data jako grafy i sbírky, efektivně transformovat a spojovat grafy s RDD a psát vlastní iterativní algoritmy grafů pomocí Pregel API.
  2. Rychlost :
    Spark GraphX ​​poskytuje srovnatelný výkon s nejrychlejšími specializovanými systémy pro zpracování grafů. Je srovnatelný s nejrychlejšími grafovými systémy, přičemž si zachovává flexibilitu, odolnost vůči chybám a snadné použití Sparku.
  3. Rostoucí knihovna algoritmů :
    Můžeme si vybrat z rostoucí knihovny grafových algoritmů, které Spark GraphX ​​nabízí. Mezi oblíbené algoritmy patří hodnocení stránek, připojené komponenty, šíření štítků, SVD ++, silně propojené komponenty apočet trojúhelníků.

Porozumění GraphX ​​s příklady

Nyní pochopíme pojmy Spark GraphX ​​na příkladu. Uvažujme o jednoduchém grafu, jak je znázorněno na obrázku níže.

Postava: Výukový program Spark GraphX ​​- příklad grafu

Při pohledu na graf můžeme extrahovat informace o lidech (vrcholy) a vztazích mezi nimi (hrany). Graf zde představuje uživatele Twitteru a koho sledují na Twitteru. Například Bob sleduje Davide a Alice na Twitteru.

Implementujme to samé pomocí Apache Spark. Nejprve importujeme potřebné třídy pro GraphX.

// Import potřebných tříd 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

Zobrazování vrcholů :Dále nyní zobrazíme všechna jména a věky uživatelů (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 '$ name je $ age')}

Výstup pro výše uvedený kód je uveden níže:

Davideje42 Franjepadesáti Vydje55 Kájaje65

Zobrazování hran : Podívejme se, která osoba má koho na Twitteru ráda.

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

Výstup pro výše uvedený kód je uveden níže:

Bobmá rádAlice Bobmá rádDavide Kájamá rádBob Kájamá rádFran Davidemá rádAlice Vydmá rádBob Vydmá rádKája Vydmá rádFran

Nyní, když jsme pochopili základy GraphX, pojďme se ponořit trochu hlouběji a provést stejné pokročilé výpočty.

Počet sledujících : Každý uživatel v našem grafu má jiný počet sledujících. Podívejme se na všechny sledovatele každého uživatele.

// Definování třídy pro jasnější modelování případové třídy vlastností uživatele Uživatel (jméno: Řetězec, věk: Int, inDeg: Int, outDeg: Int) // Vytvoření uživatele Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => Uživatel (jméno, věk, 0, 0)} // Vyplnění informací o míře uživatele userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Uživatel (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Uživatel (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} pro ((id, vlastnost)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Výstup pro výše uvedený kód je uveden níže:

Uživatel jedenje nazývánAlicea líbí se mu2lidé. Uživatel 2je nazývánBoba líbí se mu2lidé. Uživatel 3je nazývánKájaa líbí se mujedenlidé. Uživatel 4je nazývánDavidea líbí se mujedenlidé. Uživatel 5je nazývánVyda líbí se mu0lidé. Uživatel 6je nazývánFrana líbí se mu2lidé.

Nejstarší následovníci : Můžeme také řadit následovníky podle jejich charakteristik. Najdeme nejstarší následovníky každého uživatele podle věku.

// Nalezení nejstaršího následovníka pro každého uživatele Nejstarší následovník: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Pro každou hranu odešlete zprávu cílovému vrcholu s atributem zdroje vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Chcete-li kombinovat zprávy, vezměte zprávu pro staršího následovníka (a, b) => if (a. _2> b._2) a další b)

Výstup pro výše uvedený kód je uveden níže:

Davideje nejstarším stoupencemAlice. Kájaje nejstarším stoupencemBob. Vydje nejstarším stoupencemKája. Bobje nejstarším stoupencemDavide. Vydnemá žádné následovníky. Kájaje nejstarším stoupencemFran. 

Případ použití: Analýza letových dat pomocí Spark GraphX

Nyní, když jsme pochopili základní koncepty Spark GraphX, vyřešíme problém v reálném životě pomocí GraphX. To nám pomůže dát důvěru v práci na jakýchkoli projektech Spark v budoucnu.

Problémové prohlášení : Chcete-li analyzovat data letu v reálném čase pomocí Spark GraphX, poskytněte výsledky výpočtu téměř v reálném čase a vizualizujte výsledky pomocí Google Data Studio.

nejlepší java ide pro ubuntu

Použít případ - je třeba provést výpočty :

  1. Vypočítejte celkový počet letových tras
  2. Vypočítejte a roztřiďte nejdelší letové trasy
  3. Zobrazte letiště s vrcholem nejvyššího stupně
  4. Seznam nejdůležitějších letišť podle PageRank
  5. Seznam tras s nejnižšími letovými náklady

Pro výše uvedené výpočty použijeme Spark GraphX ​​a výsledky vizualizujeme pomocí Google Data Studio.

Pouzdro Použít - datová sada :

Postava: Použít případ - letová datová sada USA

Použít případ - vývojový diagram :

Následující obrázek jasně vysvětluje všechny kroky, které jsou součástí naší analýzy letových údajů.

Postava: Případ použití - Vývojový diagram analýzy letových dat pomocí Spark GraphX

Případ použití - implementace Spark :

Pohybem vpřed, nyní pojďme implementovat náš projekt pomocí Eclipse IDE pro Spark.

Níže najdete pseudokód:

// Import potřebných tříd import org.apache.spark._ ... import java.io.File objekt letiště {def main (args: Array [String]) {// Vytvoření třídy případů Flight třída případů Flight (dofM: String, dofW: String, ..., dist: Int) // Definování funkce Parse String pro analýzu vstupu do třídy Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (řádek (0), řádek (1), ..., řádek (16) .toInt)} val conf = nový SparkConf (). setAppName ('letiště'). setMaster ('local [2]') val sc = new SparkContext (conf) // Načíst data do RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analyzovat RDD linek CSV do RDD letových tříd val flightRDD = Mapovat ParseFlight na text RDD // Vytvářet letiště RDD s ID a Name val letištami = Mapovat Flight OriginID a Origin airports.take (1) // Definování výchozího vrcholu nikde a mapování ID letiště pro printlns val nowhere = 'nowhere' val airportMap = Použít funkci mapy .collect.toList.toMap // Vytváření tras RDD s ID zdroje, ID cíle a trasami vzdálenosti = letyRDD. Použijte funkci Map .distinct routes.take (2) // Vytvořit hrany RDD pomocí sourceID, destinationID a distance val edge = routes.map {(Map OriginID a DestinationID) => Edge (org_id.toLong, dest_id.toLong, vzdálenost)} edge.take (1) // Definujte graf a zobrazte některé vrcholy a hrany val graph = Graph (Airport, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Dotaz 1 - Najít celkový počet letišť val numairports = Vertices Number // Dotaz 2 - Vypočítat celkový počet tras? val numroutes = Number Of Edges // Query 3 - Calculate those routes with the distance more than 1000 miles graph.edges.filter {Get the edge distance) => distance> 1000} .take (3) // Podobně napište Scala kód pro níže dotazy // Dotaz 4 - Třídit a tisknout nejdelší trasy // Dotaz 5 - Zobrazit vrcholy nejvyššího stupně pro příchozí a odchozí lety letišť // Dotaz 6 - Získat název letiště s ID 10397 a 12478 // Dotaz 7 - Najít letiště s nejvyššími příchozími lety // Dotaz 8 - Vyhledejte letiště s nejvyššími odchozími lety // Dotaz 9 - Najděte nejdůležitější letiště podle PageRank // Dotaz 10 - Seřaďte letiště podle pořadí // Dotaz 11 - Zobrazit nejvíce důležitá letiště // Dotaz 12 - Vyhledejte trasy s nejnižšími letovými náklady // Dotaz 13 - Vyhledejte letiště a jejich nejnižší letové náklady // Dotaz 14 - Zobrazte kódy letišť spolu s seřazenými nejnižšími letovými náklady

Použít případ - vizualizace výsledků :

K vizualizaci naší analýzy budeme používat Google Data Studio. Google Data Studio je produkt v sadě Google Analytics 360. Službu Geo Map použijeme k mapování letišť na jejich příslušných místech na mapě USA a zobrazení množství metrik.

__init__ python
  1. Zobrazit celkový počet letů na letiště
  2. Zobrazte metrický součet cílových tras z každého letiště
  3. Zobrazit celkové zpoždění všech letů na letiště

Tímto končí blog Spark GraphX. Doufám, že se vám líbilo čtení a shledali jste to poučným. Podívejte se na další blog v naší sérii Apache Spark být připraveni na trh v Apache Spark.

Doporučujeme následující Školení Apache Spark Video s analýzou letových údajů od Edureky pro začátek:

Školení Apache Spark Analýza letových údajů Spark GraphX ​​| Edureka

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme nejdříve.

Pokud se chcete naučit Spark a budovat si kariéru v doméně Spark a budovat odborné znalosti k provádění rozsáhlého zpracování dat pomocí RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​a Scala s případy použití v reálném životě, podívejte se na naše interaktivní, živé - online tady, přichází s podporou 24 * 7, která vás provede celým obdobím učení.