Tutoriel Spark GraphX ​​- Graph Analytics dans Apache Spark



Ce blog du didacticiel GraphX ​​vous présentera Apache Spark GraphX, ses fonctionnalités et ses composants, y compris un projet d'analyse des données de vol.

GraphX est l'API d'Apache Spark pour les graphiques et le calcul parallèle de graphes. GraphX ​​unifie le processus ETL (Extract, Transform & Load), l'analyse exploratoire et le calcul itératif de graphes dans un seul système. L'utilisation des graphiques peut être vue dans les amis de Facebook, les connexions de LinkedIn, les routeurs Internet, les relations entre les galaxies et les étoiles en astrophysique et Google Maps. Même si le concept de calcul de graphe semble être très simple, les applications des graphes sont littéralement illimitées avec des cas d'utilisation dans les systèmes de détection de catastrophe, bancaires, boursiers, bancaires et géographiques pour n'en nommer que quelques-uns.L'apprentissage de l'utilisation de cette API est une partie importante de la .Grâce à ce blog, nous allons apprendre les concepts de Spark GraphX, ses fonctionnalités et ses composants à travers des exemples et passer en revue un cas d'utilisation complet de Flight Data Analytics à l'aide de GraphX.

Nous couvrirons les sujets suivants dans ce blog Spark GraphX:





  1. Que sont les graphiques?
  2. Cas d'utilisation du calcul graphique
  3. Qu'est-ce que Spark GraphX?
  4. Fonctionnalités de Spark GraphX
  5. Comprendre GraphX ​​avec des exemples
  6. Cas d'utilisation - Analyse des données de vol à l'aide de GraphX

Que sont les graphiques?

Un graphique est une structure mathématique équivalente à un ensemble d'objets dans lequel certaines paires d'objets sont liées dans un certain sens. Ces relations peuvent être représentées à l'aide d'arêtes et de sommets formant un graphe. Les sommets représentent les objets et les arêtes montrent les différentes relations entre ces objets.

Concepts graphiques - Tutoriel Spark GraphX ​​- EdurekaFigure: Tutoriel Spark GraphX ​​- Sommets, arêtes et triplets dans les graphiques



En informatique, un graphe est un type de données abstrait destiné à implémenter le graphe non dirigé et les concepts de graphes dirigés issus des mathématiques, en particulier le domaine de la théorie des graphes. Une structure de données de graphe peut également associer à chaque arête valeur de bord , comme une étiquette symbolique ou un attribut numérique (coût, capacité, longueur,etc.).

abstraction de données en c ++

Cas d'utilisation du calcul graphique

Les cas d'utilisation suivants donnent une perspective sur le calcul de graphes et davantage de possibilités d'implémenter d'autres solutions à l'aide de graphes.

  1. Système de détection des catastrophes

    Les graphiques peuvent être utilisés pour détecter les catastrophes telles que les ouragans, les tremblements de terre, les tsunamis, les incendies de forêt et les volcans afin de fournir des alertes pour alerter les gens.



  2. Classement Le Page Rank peut être utilisé pour trouver les influenceurs dans n'importe quel réseau tel qu'un réseau de citations papier ou un réseau de médias sociaux.
  3. Détection de fraude financière

    L'analyse graphique peut être utilisée pour surveiller les transactions financières et détecter les personnes impliquées dans la fraude financière et le blanchiment d'argent.

  4. Analyse commerciale

    Les graphiques, lorsqu'ils sont utilisés avec l'apprentissage automatique, aident à comprendre les tendances d'achat des clients. Par exemple. Uber, McDonald, etc.

  5. Systèmes d'information géographique

    Les graphiques sont intensivement utilisés pour développer des fonctionnalités sur les systèmes d'information géographique comme la délimitation des bassins versants et les prévisions météorologiques.

  6. Google Pregel

    Pregel est la plate-forme évolutive et tolérante aux pannes de Google avec une API suffisamment flexible pour exprimer un graphique arbitrairealgorithmes.

Qu'est-ce que Spark GraphX?

GraphX est l'API Spark pour les graphiques et le calcul parallèle de graphes. Il comprend une collection croissante d'algorithmes de graphes et de générateurs pour simplifier les tâches d'analyse de graphes.


GraphX ​​étend le RDD Spark avec un graphe de propriétés distribuées résilient.
Le graphe de propriétés est un multigraphe dirigé qui peut avoir plusieurs arêtes en parallèle. Chaque arête et sommet sont associés à des propriétés définies par l'utilisateur. Les bords parallèles permettent de multiplesrelations entre les mêmes sommets.

Fonctionnalités de Spark GraphX

Voici les fonctionnalités de Spark GraphX:

  1. La flexibilité :
    Spark GraphX ​​fonctionne à la fois avec des graphiques et des calculs. GraphX ​​unifie ETL (Extract, Transform & Load), l'analyse exploratoire et le calcul itératif de graphes dans un seul système. Nous pouvons afficher les mêmes données que les graphiques et les collections, transformer et joindre efficacement des graphiques avec RDD et écrire des algorithmes de graphiques itératifs personnalisés à l'aide de l'API Pregel.
  2. La vitesse :
    Spark GraphX ​​offre des performances comparables aux systèmes de traitement de graphes spécialisés les plus rapides. Il est comparable aux systèmes graphiques les plus rapides tout en conservant la flexibilité, la tolérance aux pannes et la facilité d’utilisation de Spark.
  3. Bibliothèque d'algorithmes croissante :
    Nous pouvons choisir parmi une bibliothèque croissante d'algorithmes graphiques que Spark GraphX ​​a à offrir. Certains des algorithmes populaires sont le classement de page, les composants connectés, la propagation d'étiquettes, SVD ++, les composants fortement connectés etnombre de triangles.

Comprendre GraphX ​​avec des exemples

Nous allons maintenant comprendre les concepts de Spark GraphX ​​à l'aide d'un exemple. Considérons un graphique simple comme le montre l'image ci-dessous.

Figure: Tutoriel Spark GraphX ​​- Exemple de graphique

En regardant le graphe, nous pouvons extraire des informations sur les personnes (sommets) et les relations entre elles (arêtes). Le graphique ici représente les utilisateurs de Twitter et qu'ils suivent sur Twitter. Par exemple Bob suit Davide et Alice sur Twitter.

Implémentons la même chose en utilisant Apache Spark. Tout d'abord, nous importerons les classes nécessaires pour GraphX.

// Importation des classes nécessaires 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

Affichage des sommets :De plus, nous allons maintenant afficher tous les noms et âges des utilisateurs (sommets).

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 est $ age')}

La sortie pour le code ci-dessus est comme ci-dessous:

Davidest42 Franestcinquante Edest55 Charlieest65

Affichage des arêtes : Regardons quelle personne aime qui sur Twitter.

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

La sortie pour le code ci-dessus est comme ci-dessous:

BobaimeAlice BobaimeDavid CharlieaimeBob CharlieaimeFran DavidaimeAlice EdaimeBob EdaimeCharlie EdaimeFran

Maintenant que nous avons compris les bases de GraphX, plongons un peu plus en profondeur et effectuons des calculs avancés sur le même.

Nombre d'abonnés : Chaque utilisateur de notre graphique a un nombre différent de followers. Regardons tous les abonnés pour chaque utilisateur.

// Définition d'une classe pour modéliser plus clairement la classe de cas de propriété utilisateur User (name: String, age: Int, inDeg: Int, outDeg: Int) // Création d'un utilisateur Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Remplir les informations de degré val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => User (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => User (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} pour ((id, propriété)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

La sortie pour le code ci-dessus est comme ci-dessous:

Utilisateur unest appeléAliceet est aimé par2gens. Utilisateur 2est appeléBobet est aimé par2gens. Utilisateur 3est appeléCharlieet est aimé parungens. Utilisateur 4est appeléDavidet est aimé parungens. Utilisateur 5est appeléEdet est aimé par0gens. Utilisateur 6est appeléFranet est aimé par2gens.

Abonnés les plus anciens : Nous pouvons également trier les followers par leurs caractéristiques. Trouvons les adeptes les plus anciens de chaque utilisateur par âge.

// Recherche du suiveur le plus ancien pour chaque utilisateur val plus ancienFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Pour chaque arête envoyer un message au sommet de destination avec l'attribut de la source vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Pour combiner les messages, prenez le message de l'ancien suiveur (a, b) => if (a. _2> b._2) a autre b)

La sortie pour le code ci-dessus est comme ci-dessous:

Davidest le plus ancien disciple deAlice. Charlieest le plus ancien disciple deBob. Edest le plus ancien disciple deCharlie. Bobest le plus ancien disciple deDavid. Edn'a pas d'abonnés. Charlieest le plus ancien disciple deFran. 

Cas d'utilisation: analyse des données de vol à l'aide de Spark GraphX

Maintenant que nous avons compris les concepts de base de Spark GraphX, résolvons un problème réel à l'aide de GraphX. Cela nous donnera la confiance nécessaire pour travailler sur tous les projets Spark à l'avenir.

Énoncé du problème : Pour analyser les données de vol en temps réel à l'aide de Spark GraphX, fournissez des résultats de calcul en temps quasi réel et visualisez les résultats à l'aide de Google Data Studio.

Cas d'utilisation - Calculs à effectuer :

  1. Calculez le nombre total d'itinéraires de vol
  2. Calculez et triez les itinéraires de vol les plus longs
  3. Afficher l'aéroport avec le sommet le plus élevé
  4. Liste des aéroports les plus importants selon le PageRank
  5. Lister les itinéraires avec les coûts de vol les plus bas

Nous utiliserons Spark GraphX ​​pour les calculs ci-dessus et visualiserons les résultats à l'aide de Google Data Studio.

que fait bufferedreader en java

Cas d'utilisation - Ensemble de données :

Figure: Cas d'utilisation - Ensemble de données de vol USA

Cas d'utilisation - Diagramme de flux :

L'illustration suivante explique clairement toutes les étapes impliquées dans notre analyse des données de vol.

Figure: Cas d'utilisation - Diagramme de flux de l'analyse des données de vol à l'aide de Spark GraphX

Cas d'utilisation - Implémentation Spark :

Pour aller de l'avant, implémentons maintenant notre projet à l'aide de l'IDE Eclipse pour Spark.

Trouvez le pseudo code ci-dessous:

// Importation des classes nécessaires import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Création d'une classe de cas Flight case de classe Flight (dofM: String, dofW: String, ..., dist: Int) // Définition d'une fonction Parse String pour analyser l'entrée dans la classe Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (ligne (0), ligne (1), ..., ligne (16) .toInt)} val conf = new SparkConf (). setAppName ('aéroport'). setMaster ('local [2]') val sc = new SparkContext (conf) // Charger les données dans un RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Analyser le RDD des lignes CSV dans un RDD des classes de vol val volsRDD = Map ParseFlight to Text RDD // Créer des aéroports RDD avec ID et nom val airports = Map Flight OriginID et Origin airports.take (1) // Définition d'un sommet par défaut appelé nulle part et mappage de l'ID d'aéroport pour printlns val nowhere = 'nowhere' val airportMap = Utiliser la fonction de carte .collect.toList.toMap // Créer des routes RDD avec sourceID, destinationID et distance val routes = volsRDD. Utiliser la fonction de carte .distinct routes.take (2) // Créer des arêtes RDD avec sourceID, destinationID et distance val bords = routes.map {(Map OriginID et DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} bords.take (1) // Définit le graphe et affiche quelques sommets et arêtes val graph = Graph (Airports, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Requête 1 - Rechercher le nombre total d'aéroports val numairports = Vertices Number // Requête 2 - Calculer le nombre total d'itinéraires? val numroutes = Number Of Edge // Requête 3 - Calculez ces itinéraires avec des distances de plus de 1000 miles graph.edges.filter {Get the edge distance) => distance> 1000} .take (3) // De même, écrivez le code Scala pour le sous les requêtes // Requête 4 - Trier et imprimer les itinéraires les plus longs // Requête 5 - Afficher les sommets de plus haut degré pour les vols entrants et sortants des aéroports // Requête 6 - Obtenir le nom de l'aéroport avec les ID 10397 et 12478 // Requête 7 - Trouver le aéroport avec le plus de vols entrants // Requête 8 - Trouver l'aéroport avec le plus de vols sortants // Requête 9 - Trouver les aéroports les plus importants selon le PageRank // Requête 10 - Trier les aéroports par classement // Requête 11 - Afficher le plus aéroports importants // Requête 12 - Trouver les itinéraires avec les coûts de vol les plus bas // Requête 13 - Rechercher les aéroports et leurs coûts de vol les plus bas // Requête 14 - Afficher les codes d'aéroport avec les coûts de vol les plus bas triés

Cas d'utilisation - Visualisation des résultats :

Nous utiliserons Google Data Studio pour visualiser notre analyse. Google Data Studio est un produit de la suite Google Analytics 360. Nous utiliserons le service Geo Map pour cartographier les aéroports sur leurs emplacements respectifs sur la carte des États-Unis et afficher la quantité de métriques.

  1. Afficher le nombre total de vols par aéroport
  2. Afficher la somme métrique des itinéraires de destination de chaque aéroport
  3. Afficher le retard total de tous les vols par aéroport

Maintenant, ceci conclut le blog Spark GraphX. J'espère que vous avez aimé le lire et que vous l'avez trouvé instructif. Consultez le prochain blog de notre série Apache Spark sur pour devenir prêt pour le marché dans Apache Spark.

Nous recommandons ce qui suit Formation Apache Spark | Vidéo d'analyse des données de vol d'Edureka pour commencer:

Formation Apache Spark | Analyse des données de vol Spark GraphX ​​| Edureka

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous répondrons dans les plus brefs délais.

qu'est-ce que l'abstraction en java avec exemple

Si vous souhaitez apprendre Spark et construire une carrière dans le domaine de Spark et développer une expertise pour effectuer un traitement de données à grande échelle à l'aide de RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​et Scala avec des cas d'utilisation de la vie réelle, consultez nos cas d'utilisation interactifs en direct -en ligne Ici, qui vient avec un support 24 * 7 pour vous guider tout au long de votre période d'apprentissage.