Tutorial de Spark GraphX: análisis de gráficos en Apache Spark



Este blog Tutorial de GraphX ​​le presentará Apache Spark GraphX, sus características y componentes, incluido un proyecto de análisis de datos de vuelo.

GraphX es la API de Apache Spark para gráficos y cálculo paralelo de gráficos. GraphX ​​unifica el proceso ETL (Extract, Transform & Load), el análisis exploratorio y el cálculo gráfico iterativo dentro de un solo sistema. El uso de gráficos se puede ver en los amigos de Facebook, las conexiones de LinkedIn, los enrutadores de Internet, las relaciones entre galaxias y estrellas en astrofísica y Google Maps. Aunque el concepto de cálculo de gráficos parece ser muy simple, las aplicaciones de los gráficos son literalmente ilimitadas con casos de uso en detección de desastres, banca, mercado de valores, banca y sistemas geográficos, solo por nombrar algunos.Aprender el uso de esta API es una parte importante del .A través de este blog, aprenderemos los conceptos de Spark GraphX, sus características y componentes a través de ejemplos y repasaremos un caso de uso completo de Flight Data Analytics usando GraphX.

Cubriremos los siguientes temas en este blog de Spark GraphX:





  1. ¿Qué son los gráficos?
  2. Casos de uso de cálculo gráfico
  3. ¿Qué es Spark GraphX?
  4. Funciones de Spark GraphX
  5. Comprender GraphX ​​con ejemplos
  6. Caso de uso: análisis de datos de vuelo con GraphX

¿Qué son los gráficos?

Un gráfico es una estructura matemática que equivale a un conjunto de objetos en los que algunos pares de objetos están relacionados en algún sentido. Estas relaciones se pueden representar usando aristas y vértices formando un gráfico. Los vértices representan los objetos y los bordes muestran las diversas relaciones entre esos objetos.

Conceptos de gráficos - Tutorial de Spark GraphX ​​- EdurekaFigura: Tutorial de Spark GraphX: vértices, aristas y tripletes en gráficos



En ciencias de la computación, un gráfico es un tipo de datos abstracto destinado a implementar los conceptos de gráfico no dirigido y gráfico dirigido de las matemáticas, específicamente el campo de la teoría de grafos. Una estructura de datos de gráfico también puede asociar a cada borde algunos valor de borde , como una etiqueta simbólica o un atributo numérico (costo, capacidad, longitud,etc.).

tutorial de android studio para principiantes

Casos de uso de cálculo gráfico

Los siguientes casos de uso brindan una perspectiva del cálculo de gráficos y un mayor alcance para implementar otras soluciones utilizando gráficos.

  1. Sistema de detección de desastres

    Los gráficos se pueden utilizar para detectar desastres como huracanes, terremotos, tsunamis, incendios forestales y volcanes a fin de proporcionar advertencias para alertar a las personas.



  2. Rango de página Page Rank se puede utilizar para encontrar personas influyentes en cualquier red, como una red de citas en papel o una red social.
  3. Detección de fraude financiero

    El análisis gráfico se puede utilizar para monitorear transacciones financieras y detectar personas involucradas en fraude financiero y lavado de dinero.

  4. Análisis comercial

    Los gráficos, cuando se utilizan junto con el aprendizaje automático, ayudan a comprender las tendencias de compra de los clientes. P.ej. Uber, McDonald's, etc.

  5. Sistemas de Información Geográfica

    Los gráficos se utilizan intensamente para desarrollar funcionalidades en sistemas de información geográfica como la delimitación de cuencas hidrográficas y la predicción meteorológica.

  6. Google Pregel

    Pregel es la plataforma escalable y tolerante a fallas de Google con una API que es lo suficientemente flexible para expresar gráficos arbitrarios.algoritmos.

¿Qué es Spark GraphX?

GraphX es la API de Spark para gráficos y cálculo paralelo de gráficos. Incluye una colección creciente de algoritmos y constructores de gráficos para simplificar las tareas de análisis de gráficos.


GraphX ​​amplía Spark RDD con un gráfico de propiedades distribuidas resilientes.
El gráfico de propiedades es un gráfico múltiple dirigido que puede tener varios bordes en paralelo. Cada borde y vértice tiene propiedades definidas por el usuario asociadas. Los bordes paralelos permiten múltiplesrelaciones entre los mismos vértices.

Funciones de Spark GraphX

Las siguientes son las características de Spark GraphX:

  1. Flexibilidad :
    Spark GraphX ​​funciona tanto con gráficos como con cálculos. GraphX ​​unifica ETL (Extract, Transform & Load), análisis exploratorio y cálculo gráfico iterativo dentro de un solo sistema. Podemos ver los mismos datos como gráficos y colecciones, transformar y unir gráficos con RDD de manera eficiente y escribir algoritmos de gráficos iterativos personalizados utilizando la API de Pregel.
  2. Velocidad :
    Spark GraphX ​​proporciona un rendimiento comparable al de los sistemas de procesamiento de gráficos especializados más rápidos. Es comparable con los sistemas de gráficos más rápidos al tiempo que conserva la flexibilidad, la tolerancia a fallas y la facilidad de uso de Spark.
  3. Biblioteca de algoritmos en crecimiento :
    Podemos elegir entre una creciente biblioteca de algoritmos de gráficos que Spark GraphX ​​tiene para ofrecer. Algunos de los algoritmos populares son rango de página, componentes conectados, propagación de etiquetas, SVD ++, componentes fuertemente conectados yrecuento de triángulos.

Comprender GraphX ​​con ejemplos

Ahora entenderemos los conceptos de Spark GraphX ​​usando un ejemplo. Consideremos un gráfico simple como se muestra en la siguiente imagen.

Figura: Tutorial de Spark GraphX ​​- Ejemplo de gráfico

Mirando el gráfico, podemos extraer información sobre las personas (vértices) y las relaciones entre ellas (aristas). El gráfico aquí representa a los usuarios de Twitter y a quienes siguen en Twitter. Por ejemplo Bob sigue a Davide y Alice en Twitter.

Implementemos lo mismo usando Apache Spark. Primero, importaremos las clases necesarias para GraphX.

// Importando las clases necesarias 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

Visualización de vértices :Además, ahora mostraremos todos los nombres y edades de los usuarios (vértices).

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val graph: 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 is $ age')}

El resultado del código anterior es el siguiente:

Davides42 Franes50 Edes55 Charliees65

Visualización de bordes : Veamos qué persona le gusta a quién en Twitter.

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

El resultado del código anterior es el siguiente:

BetogustosAlicia BetogustosDavid CharliegustosBeto CharliegustosFran DavidgustosAlicia EdgustosBeto EdgustosCharlie EdgustosFran

Ahora que hemos entendido los conceptos básicos de GraphX, profundicemos un poco más y realicemos algunos cálculos avanzados sobre el mismo.

algoritmo de búsqueda binaria en java

Numero de seguidores : Cada usuario de nuestro gráfico tiene un número diferente de seguidores. Veamos todos los seguidores de cada usuario.

// Definir una clase para modelar más claramente la propiedad del usuario. Class User (nombre: String, age: Int, inDeg: Int, outDeg: Int) // Crear un usuario Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Completando la información del grado val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Usuario (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Usuario (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} para ((id, propiedad)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

El resultado del código anterior es el siguiente:

Usuario 1se llamaAliciay le gusta2personas. Usuario 2se llamaBetoy le gusta2personas. Usuario 3se llamaCharliey le gusta1personas. Usuario 4se llamaDavidy le gusta1personas. Usuario 5se llamaEdy le gusta0personas. Usuario 6se llamaFrany le gusta2personas.

Seguidores más antiguos : También podemos ordenar los seguidores por sus características. Busquemos los seguidores más antiguos de cada usuario por edad.

// Encontrar el seguidor más antiguo para cada usuario val formerFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Para cada borde envíe un mensaje al vértice de destino con el atributo de la fuente vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Para combinar mensajes, toma el mensaje para el seguidor más antiguo (a, b) => if (a. _2> b._2) a más b)

El resultado del código anterior es el siguiente:

Davides el seguidor más antiguo deAlicia. Charliees el seguidor más antiguo deBeto. Edes el seguidor más antiguo deCharlie. Betoes el seguidor más antiguo deDavid. Edno tiene seguidores. Charliees el seguidor más antiguo deFran. 

Caso de uso: análisis de datos de vuelo con Spark GraphX

Ahora que hemos entendido los conceptos centrales de Spark GraphX, resolvamos un problema de la vida real usando GraphX. Esto nos ayudará a tener la confianza necesaria para trabajar en cualquier proyecto de Spark en el futuro.

Planteamiento del problema : Para analizar datos de vuelo en tiempo real con Spark GraphX, proporcione resultados de cálculo casi en tiempo real y visualice los resultados con Google Data Studio.

Caso de uso: cálculos por realizar :

  1. Calcule el número total de rutas de vuelo
  2. Calcule y ordene las rutas de vuelo más largas
  3. Mostrar el aeropuerto con el vértice de mayor grado
  4. Enumere los aeropuertos más importantes según PageRank
  5. Listar las rutas con los costos de vuelo más bajos

Usaremos Spark GraphX ​​para los cálculos anteriores y visualizaremos los resultados usando Google Data Studio.

Caso de uso: conjunto de datos :

Figura: Caso de uso: conjunto de datos de vuelo de EE. UU.

Caso de uso: diagrama de flujo :

La siguiente ilustración explica claramente todos los pasos involucrados en nuestro análisis de datos de vuelo.

Figura: Caso de uso: diagrama de flujo del análisis de datos de vuelo con Spark GraphX

Caso de uso: implementación de Spark :

Continuando, ahora implementemos nuestro proyecto usando Eclipse IDE para Spark.

Encuentre el pseudocódigo a continuación:

// Importando las clases necesarias import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Creando una clase de caso Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Definición de una función Parse String para analizar la entrada en la clase de vuelo def parseFlight (str: String): Flight = {val line = str.split (',') Flight (línea (0), línea (1), ..., línea (16) .toInt)} val conf = new SparkConf (). setAppName ('aeropuerto'). setMaster ('local [2]') val sc = new SparkContext (conf) // Cargue los datos en un RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analice el RDD de líneas CSV en un RDD de clases de vuelo val vuelosRDD = Map ParseFlight to Text RDD // Crea aeropuertos RDD con ID y nombre val Airports = Map Flight OriginID y Origin Airports.take (1) // Definición de un vértice predeterminado llamado ninguna parte y mapeo ID de aeropuerto para printlns val nowhere = 'nowhere' val airportMap = Usar la función de mapa .collect.toList.toMap // Crear rutas RDD con sourceID, destinationID y distancia val rutas = vuelosRDD. Use la función de mapa .distinct routes.take (2) // Cree bordes RDD con sourceID, destinationID y distancia val. Bordes = routes.map {(Map OriginID y DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Definir el gráfico y mostrar algunos vértices y aristas val graph = Graph (Aeropuertos, Bordes y en ninguna parte) graph.vertices.take (2) graph.edges.take (2) // Consulta 1 - Buscar el número total de aeropuertos val numairports = Número de vértices // Consulta 2 - Calcular el número total de rutas? val numroutes = Número de bordes // Consulta 3 - Calcular aquellas rutas con distancias superiores a 1000 millas graph.edges.filter {Obtener la distancia al borde) => distancia> 1000} .take (3) // De manera similar, escriba el código Scala para el consultas siguientes // Consulta 4: ordena e imprime las rutas más largas // Consulta 5: muestra los vértices de grado más alto para vuelos entrantes y salientes de aeropuertos // Consulta 6: obtén el nombre del aeropuerto con los ID 10397 y 12478 // Consulta 7: encuentra el aeropuerto con los vuelos entrantes más altos // Consulta 8 - Encuentra el aeropuerto con vuelos salientes más altos // Consulta 9 - Encuentra los aeropuertos más importantes según PageRank // Consulta 10 - Ordenar los aeropuertos por ranking // Consulta 11 - Mostrar más aeropuertos importantes // Consulta 12 - Encuentra las rutas con los costos de vuelo más bajos // Consulta 13 - Encuentra aeropuertos y sus costos de vuelo más bajos // Consulta 14 - Muestra los códigos de aeropuerto junto con los costos de vuelo más bajos ordenados

Caso de uso: visualización de resultados :

Usaremos Google Data Studio para visualizar nuestro análisis. Google Data Studio es un producto de Google Analytics 360 Suite. Usaremos el servicio Geo Map para mapear los aeropuertos en sus respectivas ubicaciones en el mapa de EE. UU. Y mostrar la cantidad de métricas.

  1. Muestra el número total de vuelos por aeropuerto
  2. Muestra la suma métrica de las rutas de destino de cada aeropuerto
  3. Muestra el retraso total de todos los vuelos por aeropuerto

Ahora, esto concluye el blog Spark GraphX. Espero que haya disfrutado leyéndolo y lo haya encontrado informativo. Consulte el próximo blog de nuestra serie Apache Spark en para estar listo para el mercado en Apache Spark.

Recomendamos lo siguiente Entrenamiento Apache Spark | Video de análisis de datos de vuelo de Edureka para empezar:

Entrenamiento Apache Spark | Análisis de datos de vuelo Spark GraphX ​​| Edureka

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos comunicaremos con usted lo antes posible.

cómo escribir escáner en java

Si desea aprender Spark y desarrollar una carrera en el dominio de Spark y adquirir experiencia para realizar procesamiento de datos a gran escala utilizando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​y Scala con casos de uso de la vida real, consulte nuestro -en línea Aquí, que viene con soporte 24 * 7 para guiarlo durante su período de aprendizaje.