GraphX é a API do Apache Spark para gráficos e computação paralela a gráficos. GraphX unifica processo ETL (Extract, Transform & Load), análise exploratória e computação gráfica iterativa em um único sistema. O uso de gráficos pode ser visto em amigos do Facebook, conexões do LinkedIn, roteadores de internet, relações entre galáxias e estrelas na astrofísica e no Google Maps. Embora o conceito de computação gráfica pareça muito simples, as aplicações de gráficos são literalmente ilimitadas com casos de uso em detecção de desastres, bancos, mercado de ações, bancos e sistemas geográficos, apenas para citar alguns.Aprender a usar esta API é uma parte importante do .Por meio deste blog, aprenderemos os conceitos do Spark GraphX, seus recursos e componentes por meio de exemplos e passaremos por um caso de uso completo de Flight Data Analytics usando GraphX.
Estaremos cobrindo os seguintes tópicos neste blog do Spark GraphX:
- O que são gráficos?
- Casos de uso de computação gráfica
- O que é Spark GraphX?
- Recursos do Spark GraphX
- Compreendendo o GraphX com exemplos
- Caso de uso - Análise de dados de voo usando GraphX
O que são gráficos?
Um gráfico é uma estrutura matemática que corresponde a um conjunto de objetos em que alguns pares de objetos estão relacionados em algum sentido. Essas relações podem ser representadas usando arestas e vértices formando um gráfico. Os vértices representam os objetos e as arestas mostram as várias relações entre esses objetos.
Figura: Tutorial do Spark GraphX - vértices, arestas e trigêmeos em gráficos
Na ciência da computação, um gráfico é um tipo de dado abstrato que se destina a implementar o gráfico não direcionado e os conceitos de gráfico direcionado da matemática, especificamente o campo da teoria dos grafos. Uma estrutura de dados de gráfico também pode associar a cada aresta alguns valor de borda , como um rótulo simbólico ou um atributo numérico (custo, capacidade, comprimento,etc.).
Casos de uso de computação gráfica
Os casos de uso a seguir fornecem uma perspectiva da computação de gráfico e um escopo adicional para implementar outras soluções usando gráficos.
- Sistema de detecção de desastres
Os gráficos podem ser usados para detectar desastres como furacões, terremotos, tsunami, incêndios florestais e vulcões, a fim de fornecer alertas para alertar as pessoas.
- Ranking da página O Page Rank pode ser usado para encontrar os influenciadores em qualquer rede, como a rede de citações em papel ou rede de mídia social.
- Detecção de fraude financeira
A análise gráfica pode ser usada para monitorar transações financeiras e detectar pessoas envolvidas em fraudes financeiras e lavagem de dinheiro.
- Análise de negócio
Os gráficos, quando usados junto com o aprendizado de máquina, ajudam a entender as tendências de compra do cliente. Por exemplo. Uber, McDonald's, etc.
- Sistemas de Informação Geográfica
Os gráficos são intensamente usados para desenvolver funcionalidades em sistemas de informações geográficas, como delineamento de bacias hidrográficas e previsão do tempo.
java deep copy vs raso copy
- Google Pregel
Pregel é a plataforma escalonável e tolerante a falhas do Google com uma API suficientemente flexível para expressar gráfico arbitrárioalgoritmos.
O que é Spark GraphX?
GraphX é a API Spark para gráficos e computação paralela a gráficos. Ele inclui uma coleção crescente de algoritmos e construtores de gráfico para simplificar as tarefas de analítica de gráfico.
GraphX estende o Spark RDD com um Resilient Distributed Property Graph.O gráfico de propriedades é um multigrafo direcionado que pode ter várias arestas em paralelo. Cada aresta e vértice têm propriedades definidas pelo usuário associadas a ele. As bordas paralelas permitem váriosrelações entre os mesmos vértices.
Recursos do Spark GraphX
A seguir estão os recursos do Spark GraphX:
- Flexibilidade :
Spark GraphX funciona com gráficos e cálculos. GraphX unifica ETL (Extract, Transform & Load), análise exploratória e computação gráfica iterativa em um único sistema. Podemos visualizar os mesmos dados como gráficos e coleções, transformar e juntar gráficos com RDDs de forma eficiente e escrever algoritmos gráficos iterativos personalizados usando a API Pregel. - Rapidez :
O Spark GraphX oferece desempenho comparável aos sistemas de processamento gráfico especializados mais rápidos. É comparável com os sistemas gráficos mais rápidos, mantendo a flexibilidade, tolerância a falhas e facilidade de uso do Spark. - Biblioteca de Algoritmo em Crescimento :
Podemos escolher em uma biblioteca crescente de algoritmos de gráfico que o Spark GraphX tem a oferecer. Alguns dos algoritmos populares são classificação de página, componentes conectados, propagação de rótulo, SVD ++, componentes fortemente conectados econtagem de triângulo.
Compreendendo o GraphX com exemplos
Agora vamos entender os conceitos do Spark GraphX usando um exemplo. Vamos considerar um gráfico simples, conforme mostrado na imagem abaixo.
Figura: Tutorial do Spark GraphX - Exemplo de gráfico
Olhando para o gráfico, podemos extrair informações sobre as pessoas (vértices) e as relações entre elas (arestas). O gráfico aqui representa os usuários do Twitter e quem eles seguem no Twitter. Por ex. Bob segue Davide e Alice no Twitter.
Vamos implementar o mesmo usando o Apache Spark. Primeiro, importaremos as classes necessárias para o GraphX.
// Importando as classes necessárias 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
Exibindo vértices :Além disso, agora exibiremos todos os nomes e idades dos usuários (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')}
A saída para o código acima é a seguinte:
Davidé42 Franécinquenta Edé55 Charlieé65
Exibindo Bordas : Vamos ver qual pessoa gosta de quem no Twitter.
para (trigêmeo<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') }
A saída para o código acima é a seguinte:
PrumogostosAlice PrumogostosDavid CharliegostosPrumo CharliegostosFran DavidgostosAlice EdgostosPrumo EdgostosCharlie EdgostosFran
Agora que entendemos os fundamentos do GraphX, vamos mergulhar um pouco mais fundo e realizar alguns cálculos avançados no mesmo.
Número de seguidores : Cada usuário em nosso gráfico possui um número diferente de seguidores. Vejamos todos os seguidores de cada usuário.
// Definindo uma classe para modelar mais claramente a classe de caso de propriedade do usuário User (name: String, age: Int, inDeg: Int, outDeg: Int) // Criando um gráfico de usuário val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Preenchendo as informações do grau val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Usuário (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Usuário (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} para ((id, propriedade)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') }
A saída para o código acima é a seguinte:
Do utilizador 1é chamadoAlicee é apreciado por2pessoas. Do utilizador 2é chamadoPrumoe é apreciado por2pessoas. Do utilizador 3é chamadoCharliee é apreciado por1pessoas. Do utilizador 4é chamadoDavide é apreciado por1pessoas. Do utilizador 5é chamadoEde é apreciado por0pessoas. Do utilizador 6é chamadoFrane é apreciado por2pessoas.
Seguidores mais antigos : Também podemos classificar os seguidores por suas características. Vamos encontrar os seguidores mais antigos de cada usuário por idade.
// Encontrando o seguidor mais antigo para cada usuário val oldFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Para cada aresta enviar uma mensagem ao vértice de destino com o atributo da fonte vértice edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Para combinar mensagens pegue a mensagem para o seguidor mais antigo (a, b) => if (a. _2> b._2) a else b)
A saída para o código acima é a seguinte:
Davidé o seguidor mais antigo deAlice. Charlieé o seguidor mais antigo dePrumo. Edé o seguidor mais antigo deCharlie. Prumoé o seguidor mais antigo deDavid. Ednão tem nenhum seguidor. Charlieé o seguidor mais antigo deFran.
Caso de uso: análise de dados de voo usando Spark GraphX
Agora que entendemos os principais conceitos do Spark GraphX, vamos resolver um problema da vida real usando o GraphX. Isso nos ajudará a ter confiança para trabalhar em qualquer projeto Spark no futuro.
Declaração do Problema : Para analisar dados de voo em tempo real usando Spark GraphX, forneça resultados de computação quase em tempo real e visualize os resultados usando Google Data Studio.
Caso de uso - cálculos a serem feitos :
o que é um hashset java
- Calcule o número total de rotas de voo
- Calcular e classificar as rotas de voo mais longas
- Exibir o aeroporto com o vértice de grau mais alto
- Liste os aeroportos mais importantes de acordo com o PageRank
- Liste as rotas com os custos de voo mais baixos
Usaremos Spark GraphX para os cálculos acima e visualizaremos os resultados usando o Google Data Studio.
Caso de uso - conjunto de dados :
Figura: Caso de uso - Conjunto de dados de voo nos EUA
Caso de uso - Diagrama de fluxo :
A ilustração a seguir explica claramente todas as etapas envolvidas em nossa Análise de Dados de Voo.
Figura: Caso de uso - diagrama de fluxo de análise de dados de voo usando Spark GraphX
Caso de uso - Implementação do Spark :
Seguindo em frente, agora vamos implementar nosso projeto usando Eclipse IDE para Spark.
Encontre o pseudo código abaixo:
// Importando as classes necessárias import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Criando um Case Class Flight case class Flight (dofM: String, dofW: String, ..., dist: Int) // Definindo uma função Parse String para analisar a entrada na classe Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (linha (0), linha (1), ..., linha (16) .toInt)} val conf = new SparkConf (). setAppName ('aeroporto'). setMaster ('local [2]') val sc = new SparkContext (conf) // Carregar os dados em um RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analisar o RDD de linhas CSV em um RDD de classes de vôo val flightRDD = Map ParseFlight para Texto RDD // Criar aeroportos RDD com ID e Nome val aeroportos = Mapear Voo OriginID e Origem aeroportos.take (1) // Definindo um vértice padrão chamado nowhere e mapeando Airport ID para printlns val nowhere = 'nowhere' val airportMap = Usar função de mapa .collect.toList.toMap // Criar rotas RDD com sourceID, destinationID e distance val routes = flightsRDD. Use a função de mapa .distinct routes.take (2) // Criar bordas RDD com sourceID, destinationID e distance val edge = routes.map {(Map OriginID e DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Define o gráfico e mostra alguns vértices e arestas val graph = Graph (Airports, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Find número total de aeroportos val numairports = Número de vértices // Consulta 2 - Calcular o número total de rotas? val numroutes = Número de bordas // Consulta 3 - Calcule aquelas rotas com distâncias superiores a 1000 milhas graph.edges.filter {Get the edge distance) => distance> 1000} .take (3) // Similarmente escreva o código Scala para o consultas abaixo // Consulta 4 - Classifique e imprima as rotas mais longas // Consulta 5 - Exibir vértices de maior grau para voos de entrada e saída de aeroportos // Consulta 6 - Obtenha o nome do aeroporto com IDs 10397 e 12478 // Consulta 7 - Encontre o aeroporto com os voos de entrada mais altos // Consulta 8 - Encontre o aeroporto com os voos de saída mais altos // Consulta 9 - Encontre os aeroportos mais importantes de acordo com o PageRank // Consulta 10 - Classifique os aeroportos por classificação // Consulta 11 - Mostrar mais aeroportos importantes // Consulta 12 - Encontre as rotas com os custos de voo mais baixos // Consulta 13 - Encontre aeroportos e seus custos de voo mais baixos // Consulta 14 - Exibir códigos de aeroporto juntamente com os custos de voo mais baixos classificados
Caso de uso - Visualizando resultados :
Usaremos o Google Data Studio para visualizar nossa análise. O Google Data Studio é um produto do Google Analytics 360 Suite. Usaremos o serviço Geo Map para mapear os aeroportos em seus respectivos locais no mapa dos EUA e exibir a quantidade de métricas.
- Exibir o número total de voos por aeroporto
- Exibir a soma métrica das rotas de destino de cada aeroporto
- Exibir o atraso total de todos os voos por aeroporto
Agora, isso conclui o blog Spark GraphX. Espero que você tenha gostado de lê-lo e considerado informativo. Confira o próximo blog em nossa série Apache Spark sobre para estar pronto para o mercado no Apache Spark.
Recomendamos o seguinte Treinamento do Apache Spark | Vídeo de análise de dados de voo de Edureka para começar:
Treinamento do Apache Spark | Análise de dados de voo do Spark GraphX | Edureka
Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você o mais breve possível.
Se você deseja aprender o Spark e construir uma carreira no domínio do Spark e construir experiência para realizar processamento de dados em grande escala usando RDD, Spark Streaming, SparkSQL, MLlib, GraphX e Scala com casos de uso da vida real, confira nossos casos de uso interativo e ao vivo -conectados Aqui, que vem com suporte 24 horas por dia, 7 dias por semana para guiá-lo durante o período de aprendizado.
diferença entre git e github