Tutorial de Spark GraphX ​​- Analítica de gràfics a Apache Spark



Aquest bloc Tutorial GraphX ​​us presentarà Apache Spark GraphX, les seves característiques i components, inclòs un projecte d’anàlisi de dades de vol.

GraphX és l’API d’Apache Spark per a gràfics i càlcul paral·lel de gràfics. GraphX ​​unifica el procés ETL (Extract, Transform & Load), anàlisi exploratori i càlcul iteratiu de gràfics dins d’un sol sistema. L’ús de gràfics es pot veure als amics de Facebook, a les connexions de LinkedIn, als encaminadors d’Internet, a les relacions entre galàxies i estrelles a l’astrofísica i a Google Maps. Tot i que el concepte de càlcul de gràfics sembla ser molt senzill, les aplicacions dels gràfics són literalment il·limitades, amb casos d’ús en sistemes de detecció de desastres, banca, borses, banca i geogràfics, per citar només alguns.L'aprenentatge de l'ús d'aquesta API és una part important del .A través d’aquest bloc, coneixerem els conceptes de Spark GraphX, les seves característiques i components a través d’exemples i passarem a un cas d’ús complet de Flight Data Analytics mitjançant GraphX.

En aquest bloc de Spark GraphX ​​tractarem els temes següents:





  1. Què són els gràfics?
  2. Casos d’ús de càlcul de gràfics
  3. Què és Spark GraphX?
  4. Funcions de Spark GraphX
  5. Comprensió de GraphX ​​amb exemples
  6. Cas d'ús: anàlisi de dades de vol mitjançant GraphX

Què són els gràfics?

Un gràfic és una estructura matemàtica que equival a un conjunt d'objectes en què alguns parells d'objectes estan relacionats en algun sentit. Aquestes relacions es poden representar mitjançant arestes i vèrtexs formant un gràfic. Els vèrtexs representen els objectes i les vores mostren les diverses relacions entre aquests objectes.

Conceptes de gràfics - Tutorial Spark GraphX ​​- EdurekaFigura: Tutorial Spark GraphX: vèrtexs, arestes i triplets en gràfics



En informàtica, un gràfic és un tipus de dades abstractes que s’utilitza per implementar els conceptes de gràfics no dirigits i de gràfics dirigits a partir de les matemàtiques, específicament el camp de la teoria de gràfics. Una estructura de dades de gràfics també pot associar-se a cada vora valor de vora , com ara una etiqueta simbòlica o un atribut numèric (cost, capacitat, longitud,etc.).

com crear un conjunt

Casos d’ús de càlcul de gràfics

Els casos d'ús següents ofereixen una perspectiva sobre el càlcul de gràfics i un abast addicional per implementar altres solucions mitjançant gràfics.

  1. Sistema de detecció de desastres

    Els gràfics es poden utilitzar per detectar desastres com ara huracans, terratrèmols, tsunami, incendis forestals i volcans per proporcionar avisos per alertar les persones.



  2. Classificació de la pàgina El rànquing de pàgines es pot utilitzar per trobar els influencers en qualsevol xarxa, com ara una xarxa de cites en paper o una xarxa de xarxes socials.
  3. Detecció de fraus financers

    L'anàlisi de gràfics es pot utilitzar per controlar les transaccions financeres i detectar persones implicades en fraus financers i blanqueig de diners.

  4. Anàlisi de negoci

    Els gràfics, quan s’utilitzen juntament amb l’aprenentatge automàtic, ajuden a entendre les tendències de compra dels clients. Per exemple. Uber, McDonald’s, etc.

  5. Sistemes d’Informació Geogràfica

    Els gràfics s’utilitzen intensament per desenvolupar funcionalitats en sistemes d’informació geogràfica com la delimitació de les conques hidràuliques i la predicció del temps.

  6. Google Pregel

    Pregel és la plataforma escalable i tolerant a fallades de Google amb una API prou flexible per expressar gràfics arbitrarisalgoritmes.

Què és Spark GraphX?

GraphX és l'API Spark per a gràfics i càlcul paral·lel de gràfics. Inclou una col·lecció creixent d’algoritmes i creadors de gràfics per simplificar les tasques d’anàlisi de gràfics.


GraphX ​​amplia el Spark RDD amb un gràfic de propietats distribuïdes resistents.
El gràfic de propietats és un multigràfic dirigit que pot tenir diverses arestes en paral·lel. Cada vora i vèrtex tenen propietats definides per l'usuari associades. Les vores paral·leles permeten múltiplesrelacions entre els mateixos vèrtexs.

Funcions de Spark GraphX

A continuació es detallen les funcions de Spark GraphX:

  1. Flexibilitat :
    Spark GraphX ​​funciona tant amb gràfics com amb càlculs. GraphX ​​unifica ETL (Extract, Transform & Load), anàlisi exploratori i càlcul iteratiu de gràfics dins d’un sol sistema. Podem veure les mateixes dades que els gràfics i les col·leccions, transformar i unir gràfics amb RDD de manera eficient i escriure algorismes de gràfics iteratius personalitzats mitjançant l’API Pregel.
  2. Velocitat :
    Spark GraphX ​​proporciona un rendiment comparable als sistemes de processament de gràfics especialitzats més ràpids. És comparable amb els sistemes de gràfics més ràpids, mantenint la flexibilitat, la tolerància a fallades i la facilitat d’ús de Spark.
  3. Biblioteca d’algorismes creixents :
    Podem triar entre una biblioteca creixent d’algoritmes de gràfics que Spark GraphX ​​pot oferir. Alguns dels algoritmes més populars són el rang de pàgina, components connectats, propagació d'etiquetes, SVD ++, components fortament connectats irecompte de triangles.

Comprensió de GraphX ​​amb exemples

Ara entendreem els conceptes de Spark GraphX ​​amb un exemple. Considerem un gràfic simple com es mostra a la imatge següent.

Figura: Tutorial Spark GraphX: exemple de gràfic

Veient el gràfic, podem extreure informació sobre les persones (vèrtexs) i les relacions entre elles (vores). El gràfic aquí representa els usuaris de Twitter i a qui segueixen a Twitter. Per exemple, Bob segueix Davide i Alice a Twitter.

Implantem el mateix amb Apache Spark. Primer, importarem les classes necessàries per a GraphX.

// Importar les classes necessàries 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

Visualització de vèrtexs :A més, ara mostrarem tots els noms i edats dels usuaris (vèrtexs).

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

La sortida del codi anterior és la següent:

Davidés42 Franés50 Edés55 Charlieés65

Visualització de vores : Vegem quina persona li agrada a qui a Twitter.

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

La sortida del codi anterior és la següent:

Bobm'agradaAlícia Bobm'agradaDavid Charliem'agradaBob Charliem'agradaFran Davidm'agradaAlícia Edm'agradaBob Edm'agradaCharlie Edm'agradaFran

Ara que hem entès els conceptes bàsics de GraphX, aprofundim una mica més i realitzem alguns càlculs avançats sobre el mateix.

Nombre de seguidors : Tots els usuaris del nostre gràfic tenen un nombre diferent de seguidors. Vegem tots els seguidors de cada usuari.

// Definició d’una classe per modelar amb més claredat la classe de majúscules i propietats de l’usuari Usuari (nom: Cadena, edat: Int, inDeg: Int, outDeg: Int) // Creació d’un usuari Gràfic val initialUserGraph: Graph [User, Int] = gràfic. mapVertices {case (id, (name, age)) => Usuari (name, age, 0, 0)} // Emplenament de la informació del títol val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Usuari (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Usuari (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} per a ((id, propietat)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

La sortida del codi anterior és la següent:

Usuari 1es diuAlíciai li agrada2gent. Usuari 2es diuBobi li agrada2gent. Usuari 3es diuCharliei li agrada1gent. Usuari 4es diuDavidi li agrada1gent. Usuari 5es diuEdi li agrada0gent. Usuari 6es diuFrani li agrada2gent.

Seguidors més antics : També podem ordenar els seguidors per les seves característiques. Cerquem els seguidors més antics de cada usuari per edat.

// Trobar el seguidor més antic per a cada usuari val olderFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Per a cada vora envieu un missatge al vèrtex de destinació amb l'atribut de la font vèrtex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Per combinar missatges agafeu el missatge del seguidor més antic (a, b) => if (a. _2> b._2) una altra b)

La sortida del codi anterior és la següent:

Davidés el seguidor més antic deAlícia. Charlieés el seguidor més antic deBob. Edés el seguidor més antic deCharlie. Bobés el seguidor més antic deDavid. Edno té cap seguidor. Charlieés el seguidor més antic deFran. 

Cas d'ús: anàlisi de dades de vol mitjançant Spark GraphX

Ara que hem entès els conceptes bàsics de Spark GraphX, resolem un problema de la vida real amb GraphX. Això ens ajudarà a donar-nos confiança per treballar en qualsevol projecte Spark en el futur.

Plantejament del problema : Per analitzar les dades de vol en temps real mitjançant Spark GraphX, proporcioneu resultats de càlcul gairebé en temps real i visualitzeu-los amb Google Data Studio.

Cas d'ús: càlculs que cal fer :

  1. Calculeu el nombre total de rutes de vol
  2. Calculeu i ordeneu les rutes de vol més llargues
  3. Mostra l'aeroport amb el vèrtex més alt
  4. Enumereu els aeroports més importants segons PageRank
  5. Enumereu les rutes amb els costos de vol més baixos

Utilitzarem Spark GraphX ​​per als càlculs anteriors i visualitzarem els resultats amb Google Data Studio.

Cas d'ús: conjunt de dades :

Figura: Cas d'ús: conjunt de dades de vols dels EUA

Cas d'ús: diagrama de flux :

La següent il·lustració explica clarament tots els passos implicats en la nostra anàlisi de dades de vol.

Figura: Cas d’ús: diagrama de flux de l’anàlisi de dades de vol mitjançant Spark GraphX

Cas d'ús: implementació de Spark :

Avançant, ara implementem el nostre projecte amb Eclipse IDE per Spark.

Trobeu el pseudocodi a continuació:

// Importació de les classes necessàries import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Creació d’una classe de casos Vol de classe de casos Flight (dofM: String, dofW: String, ..., dist: Int) // Definició d'una funció Parse String per analitzar l'entrada a la classe de vol def parseFlight (str: String): Flight = {val line = str.split (',') Flight (line (0), line (1), ..., line (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = nou SparkContext (conf) // Carrega les dades en un val RDD textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analitza el RDD de línies CSV en un RDD de classes de vol val volsRDD = Mapa ParseFlight a Text RDD // Crea aeroports RDD amb ID i nom val airports = Mapa Flight OriginID i Origin airports.take (1) // Definició d'un vèrtex per defecte anomenat enlloc i assignació d'identificació d'aeroport per a printlns val nowhere = 'enlloc' val airportMap = Utilitza la funció de mapa .collect.toList.toMap // Crea rutes RDD amb ID de font, ID de destinació i rutes val de distància = volsRDD. Utilitzeu la funció de mapa .distinct routes.take (2) // Creeu vores RDD amb ID font, ID de destinació i distància val edge = routes.map {(Map OriginID i DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Definiu el gràfic i visualitzeu alguns vèrtexs i arestes val graph = Graph (Aeroports, vores i enlloc) graph.vertices.take (2) graph.edges.take (2) // Consulta 1 - Cerqueu el nombre total d’aeroports val numairports = Número de vèrtexs // Consulta 2 - Calculeu el nombre total de rutes? val numroutes = Nombre d'arestes // Consulta 3: calculeu les rutes amb distàncies superiors a 1000 milles graph.edges.filter {Obteniu la distància de l'aresta) => distància> 1000}. Preneu (3) // De la mateixa manera, escriviu el codi Scala per al a continuació de les consultes // Consulta 4: ordeneu i imprimiu les rutes més llargues // Consulta 5: mostra els vèrtexs de major grau per als vols d’entrada i sortida d’aeroports // Consulta 6: obteniu el nom de l’aeroport amb els identificadors 10397 i 12478 // Consulta 7: cerqueu el aeroport amb els vols d'entrada més elevats // Consulta 8 - Cerqueu l'aeroport amb els vols de sortida més elevats // Consulta 9 - Cerqueu els aeroports més importants segons PageRank // Consulta 10 - Ordeneu els aeroports per rànquing // Consulta 11 - Mostreu la majoria aeroports importants // Consulta 12: cerqueu les rutes amb els costos de vol més baixos // Consulta 13: cerqueu aeroports i els costos de vol més baixos // Consulta 14: mostreu els codis d’aeroport juntament amb els costos de vol més baixos ordenats

Cas d'ús: visualització de resultats :

Utilitzarem Google Data Studio per visualitzar les nostres anàlisis. Google Data Studio és un producte de Google Analytics 360 Suite. Utilitzarem el servei Geo Map per mapear els aeroports a les seves respectives ubicacions al mapa dels EUA i mostrar la quantitat de mètriques.

  1. Mostra el nombre total de vols per aeroport
  2. Mostra la suma mètrica de les rutes de destinació de cada aeroport
  3. Mostra el retard total de tots els vols per aeroport

Ara, això conclou el bloc Spark GraphX. Espero que us hagi agradat llegir-lo i que us hagi resultat informatiu. Consulteu el proper bloc de la nostra sèrie Apache Spark a per estar preparat per al mercat a Apache Spark.

parts d’un programa Java

Us recomanem el següent Apache Spark Training | Vídeo d'anàlisi de dades de vol des d'Edureka per començar:

Apache Spark Training | Anàlisi de dades de vols Spark GraphX ​​| Edureka

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris i ens posarem en contacte amb vosaltres al més aviat possible.

Si voleu aprendre Spark i construir una carrera en el domini de Spark i adquirir experiència per realitzar processos de dades a gran escala mitjançant RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​i Scala amb casos d’ús de la vida real, consulteu el nostre -en línia aquí, que inclou suport 24 * 7 per orientar-vos durant tot el vostre període d'aprenentatge.