Esercitazione su Spark GraphX ​​- Analisi del grafico in Apache Spark



Questo blog tutorial di GraphX ​​ti introdurrà ad Apache Spark GraphX, alle sue caratteristiche e ai suoi componenti, incluso un progetto di analisi dei dati di volo.

GraphX è l'API di Apache Spark per i grafici e il calcolo parallelo al grafico. GraphX ​​unifica il processo ETL (Extract, Transform & Load), l'analisi esplorativa e il calcolo iterativo del grafico in un unico sistema. L'utilizzo dei grafici può essere visto negli amici di Facebook, nelle connessioni di LinkedIn, nei router di Internet, nelle relazioni tra galassie e stelle nell'astrofisica e in Google Maps. Anche se il concetto di calcolo del grafico sembra essere molto semplice, le applicazioni dei grafici sono letteralmente illimitate con casi d'uso nel rilevamento di disastri, banche, mercato azionario, banche e sistemi geografici solo per citarne alcuni.Imparare a utilizzare questa API è una parte importante di .Attraverso questo blog, impareremo i concetti di Spark GraphX, le sue caratteristiche e componenti attraverso esempi e analizzeremo un caso d'uso completo di Flight Data Analytics utilizzando GraphX.

Tratteremo i seguenti argomenti in questo blog Spark GraphX:





  1. Cosa sono i grafici?
  2. Casi d'uso del calcolo di grafici
  3. Cos'è Spark GraphX?
  4. Caratteristiche di Spark GraphX
  5. Comprensione di GraphX ​​con esempi
  6. Caso di utilizzo: analisi dei dati di volo utilizzando GraphX

Cosa sono i grafici?

Un grafico è una struttura matematica che equivale a un insieme di oggetti in cui alcune coppie di oggetti sono correlate in un certo senso. Queste relazioni possono essere rappresentate usando bordi e vertici che formano un grafo. I vertici rappresentano gli oggetti e i bordi mostrano le varie relazioni tra questi oggetti.

Concetti grafici - Tutorial Spark GraphX ​​- EdurekaFigura: Spark GraphX ​​Tutorial - Vertici, bordi e terzine nei grafici



In informatica, un grafico è un tipo di dati astratto che ha lo scopo di implementare il grafo non orientato e concetti di grafi diretti dalla matematica, in particolare il campo della teoria dei grafi. Una struttura dati a grafo può anche associare a ciascun bordo alcuni valore del bordo , come un'etichetta simbolica o un attributo numerico (costo, capacità, lunghezza,eccetera.).

Casi d'uso del calcolo di grafici

I seguenti casi d'uso offrono una prospettiva nel calcolo dei grafici e un ulteriore ambito per implementare altre soluzioni utilizzando i grafici.

  1. Sistema di rilevamento dei disastri

    I grafici possono essere utilizzati per rilevare disastri come uragani, terremoti, tsunami, incendi boschivi e vulcani in modo da fornire avvisi per allertare le persone.



  2. Page Rank Il Page Rank può essere utilizzato per trovare gli influencer in qualsiasi rete come la rete di citazioni cartacee o la rete di social media.
  3. Rilevamento di frodi finanziarie

    L'analisi del grafico può essere utilizzata per monitorare le transazioni finanziarie e rilevare le persone coinvolte in frodi finanziarie e riciclaggio di denaro.

  4. Analisi aziendale

    I grafici, se utilizzati insieme al Machine Learning, aiutano a comprendere le tendenze di acquisto dei clienti. Per esempio. Uber, McDonald's, ecc.

  5. Sistemi di informazione geografica

    I grafici vengono utilizzati in modo intensivo per sviluppare funzionalità sui sistemi di informazione geografica come la delineazione dei bacini idrografici e la previsione meteorologica.

    java come convertire double in int
  6. Google Pregel

    Pregel è la piattaforma scalabile e tollerante ai guasti di Google con un'API sufficientemente flessibile per esprimere grafici arbitrarialgoritmi.

Cos'è Spark GraphX?

GraphX è l'API Spark per i grafici e il calcolo parallelo al grafico. Include una raccolta crescente di algoritmi di grafici e builder per semplificare le attività di analisi dei grafici.


GraphX ​​estende Spark RDD con un resilient Distributed Property Graph.
Il grafico delle proprietà è un multigrafo diretto che può avere più bordi in parallelo. A ogni bordo e vertice sono associate proprietà definite dall'utente. I bordi paralleli consentono piùrelazioni tra gli stessi vertici.

Caratteristiche di Spark GraphX

Le seguenti sono le caratteristiche di Spark GraphX:

  1. Flessibilità :
    Spark GraphX ​​funziona sia con grafici che con calcoli. GraphX ​​unifica ETL (Extract, Transform & Load), analisi esplorativa e calcolo iterativo di grafici in un unico sistema. Possiamo visualizzare gli stessi dati sia come grafici che come raccolte, trasformare e unire grafici con RDD in modo efficiente e scrivere algoritmi grafici iterativi personalizzati utilizzando l'API Pregel.
  2. Velocità :
    Spark GraphX ​​offre prestazioni paragonabili ai più veloci sistemi di elaborazione di grafici specializzati. È paragonabile ai sistemi grafici più veloci pur mantenendo la flessibilità, la tolleranza ai guasti e la facilità d'uso di Spark.
  3. Libreria di algoritmi in crescita :
    Possiamo scegliere da una libreria in crescita di algoritmi di grafi che Spark GraphX ​​ha da offrire. Alcuni degli algoritmi più diffusi sono il page rank, i componenti connessi, la propagazione delle etichette, SVD ++, i componenti fortemente connessi econteggio triangoli.

Comprensione di GraphX ​​con esempi

Comprenderemo ora i concetti di Spark GraphX ​​usando un esempio. Consideriamo un semplice grafico come mostrato nell'immagine sottostante.

Figura: Tutorial Spark GraphX ​​- Esempio di grafico

Guardando il grafico, possiamo estrarre informazioni sulle persone (vertici) e le relazioni tra loro (bordi). Il grafico qui rappresenta gli utenti di Twitter e quelli che seguono su Twitter. Ad esempio Bob segue Davide e Alice su Twitter.

Cerchiamo di implementare lo stesso utilizzando Apache Spark. Innanzitutto, importeremo le classi necessarie per GraphX.

// Importazione delle classi necessarie 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

Visualizzazione dei vertici :Inoltre, ora visualizzeremo tutti i nomi e le età degli utenti (vertici).

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

L'output per il codice sopra è il seguente:

Davidè42 Franècinquanta Edè55 Charlieè65

Visualizzazione dei bordi : Guardiamo a quale persona piace chi su Twitter.

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

L'output per il codice sopra è il seguente:

come diventare ingegnere ai
BobpiaceAlice BobpiaceDavid CharliepiaceBob CharliepiaceFran DavidpiaceAlice EdpiaceBob EdpiaceCharlie EdpiaceFran

Ora che abbiamo compreso le basi di GraphX, immergiamoci un po 'più a fondo ed eseguiamo alcuni calcoli avanzati sullo stesso.

Numero di follower : Ogni utente nel nostro grafico ha un numero diverso di follower. Diamo un'occhiata a tutti i follower di ogni utente.

// Definizione di una classe per modellare più chiaramente la classe case della proprietà utente User (name: String, age: Int, inDeg: Int, outDeg: Int) // Creazione di un utente Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Compilando le informazioni sui gradi val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Utente (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Utente (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} per ((id, proprietà)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

L'output per il codice sopra è il seguente:

Utente unoè chiamatoAliceed è apprezzato da2persone. Utente 2è chiamatoBobed è apprezzato da2persone. Utente 3è chiamatoCharlieed è apprezzato daunopersone. Utente 4è chiamatoDavided è apprezzato daunopersone. Utente 5è chiamatoEded è apprezzato da0persone. Utente 6è chiamatoFraned è apprezzato da2persone.

Seguaci più anziani : Possiamo anche ordinare i follower in base alle loro caratteristiche. Cerchiamo di trovare i follower più vecchi di ogni utente per età.

// Trovare il follower più vecchio per ogni utente val più vecchioFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Per ogni bordo invia un messaggio al vertice di destinazione con l'attributo della sorgente vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Per combinare i messaggi prendi il messaggio per il follower più anziano (a, b) => if (a. _2> b._2) a else b)

L'output per il codice sopra è il seguente:

Davidè il seguace più anziano diAlice. Charlieè il seguace più anziano diBob. Edè il seguace più anziano diCharlie. Bobè il seguace più anziano diDavid. Ednon ha follower. Charlieè il seguace più anziano diFran. 

Caso d'uso: analisi dei dati di volo con Spark GraphX

Ora che abbiamo compreso i concetti fondamentali di Spark GraphX, risolviamo un problema della vita reale utilizzando GraphX. Questo ci darà la fiducia necessaria per lavorare su qualsiasi progetto Spark in futuro.

Dichiarazione problema : Per analizzare i dati di volo in tempo reale utilizzando Spark GraphX, fornisci risultati di calcolo quasi in tempo reale e visualizza i risultati utilizzando Google Data Studio.

Caso d'uso: calcoli da eseguire :

  1. Calcola il numero totale di rotte di volo
  2. Calcola e ordina le rotte di volo più lunghe
  3. Visualizza l'aeroporto con il vertice di grado più elevato
  4. Elenca gli aeroporti più importanti in base al PageRank
  5. Elenca le rotte con i costi di volo più bassi

Useremo Spark GraphX ​​per i calcoli sopra e visualizzeremo i risultati utilizzando Google Data Studio.

Caso d'uso - Set di dati :

Figura: Caso d'uso - Set di dati di volo USA

Caso d'uso - Diagramma di flusso :

La seguente illustrazione spiega chiaramente tutti i passaggi coinvolti nella nostra analisi dei dati di volo.

Figura: Caso d'uso: diagramma di flusso dell'analisi dei dati di volo utilizzando Spark GraphX

Caso d'uso: implementazione di Spark :

Andando avanti, ora implementiamo il nostro progetto utilizzando Eclipse IDE per Spark.

Trova lo pseudo codice di seguito:

// Importazione delle classi necessarie import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Creazione di una classe Case Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Definizione di una funzione Parse String per analizzare l'input nella classe Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (riga (0), riga (1), ..., riga (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = new SparkContext (conf) // Carica i dati in un RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analizza l'RDD delle linee CSV in un RDD di classi di volo val flightRDD = Mappa ParseFlight su Testo RDD // Crea aeroporti RDD con ID e Nome val aeroporti = Mappa ID volo Origin e Origin airports.take (1) // Definizione di un vertice predefinito chiamato nowhere e mappatura dell'ID aeroporto per printlns val nowhere = 'nowhere' val airportMap = Usa funzione mappa .collect.toList.toMap // Crea rotte RDD con sourceID, destinationID e distance val routes = FlightsRDD. Usa la funzione mappa .distinct routes.take (2) // Crea bordi RDD con sourceID, destinationID e distance val edge = routes.map {(Map OriginID and DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Definisce il grafico e mostra alcuni vertici e bordi val graph = Graph (Airports, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Trova il numero totale di aeroporti val numairports = Numero vertici // Domanda 2 - Calcola il numero totale di rotte? val numroutes = Number Of Edges // Query 3 - Calcola quei percorsi con distanze superiori a 1000 miglia graph.edges.filter {Get the edge distance) => distance> 1000} .take (3) // Allo stesso modo scrivi il codice Scala per il query sotto // Query 4 - Ordina e stampa le rotte più lunghe // Query 5 - Visualizza i vertici di grado più alto per i voli in entrata e in uscita degli aeroporti // Query 6 - Ottieni il nome dell'aeroporto con ID 10397 e 12478 // Query 7 - Trova il aeroporto con i voli in arrivo più alti // Domanda 8 - Trova l'aeroporto con i voli in uscita più alti // Domanda 9 - Trova gli aeroporti più importanti in base al PageRank // Domanda 10 - Ordina gli aeroporti per classifica // Domanda 11 - Visualizza i più aeroporti importanti // Domanda 12 - Trova le rotte con i costi di volo più bassi // Domanda 13 - Trova gli aeroporti e i loro costi di volo più bassi // Domanda 14 - Visualizza i codici degli aeroporti insieme ai costi di volo più bassi ordinati

Caso d'uso - Visualizzazione dei risultati :

Useremo Google Data Studio per visualizzare la nostra analisi. Google Data Studio è un prodotto di Google Analytics 360 Suite. Useremo il servizio Geo Map per mappare gli aeroporti nelle rispettive posizioni sulla mappa degli Stati Uniti e visualizzare la quantità di metriche.

  1. Visualizza il numero totale di voli per aeroporto
  2. Visualizza la somma metrica delle rotte di destinazione da ogni aeroporto
  3. Visualizza il ritardo totale di tutti i voli per aeroporto

Ora, questo conclude il blog di Spark GraphX. Spero vi sia piaciuto leggerlo e che sia stato istruttivo. Dai un'occhiata al prossimo blog nella nostra serie di Apache Spark su per diventare pronto per il mercato in Apache Spark.

Consigliamo quanto segue Formazione su Apache Spark | Video di analisi dei dati di volo da Edureka per cominciare:

Formazione su Apache Spark | Spark GraphX ​​Analisi dei dati di volo | Edureka

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo al più presto.

Se desideri imparare Spark e costruire una carriera nel dominio di Spark e sviluppare competenze per eseguire elaborazione dati su larga scala utilizzando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala con casi d'uso Real Life, dai un'occhiata al nostro interattivo, live -in linea Qui, che viene fornito con supporto 24 * 7 per guidarti durante il tuo periodo di apprendimento.

tipi di commento in java