Tutorial Spark GraphX ​​- Ανάλυση γραφημάτων στο Apache Spark



Αυτό το blog Tutorial GraphX ​​θα σας παρουσιάσει στο Apache Spark GraphX, τις δυνατότητες και τα συστατικά του, συμπεριλαμβανομένου ενός έργου Ανάλυσης Δεδομένων Πτήσης.

ΓράφημαX είναι το API του Apache Spark για γραφήματα και παράλληλους υπολογισμούς γραφημάτων. Το GraphX ​​ενοποιεί τη διαδικασία ETL (Extract, Transform & Load), την διερευνητική ανάλυση και τον επαναληπτικό υπολογισμό γραφημάτων σε ένα μόνο σύστημα. Η χρήση γραφημάτων μπορεί να φανεί στους φίλους του Facebook, στις συνδέσεις του LinkedIn, στους δρομολογητές του Διαδικτύου, στις σχέσεις μεταξύ γαλαξιών και αστεριών στην αστροφυσική και στους Χάρτες της Google. Παρόλο που η έννοια του υπολογισμού γραφημάτων φαίνεται να είναι πολύ απλή, οι εφαρμογές γραφημάτων είναι κυριολεκτικά απεριόριστες με περιπτώσεις χρήσης σε εντοπισμό καταστροφών, τραπεζικές συναλλαγές, χρηματιστήριο, τραπεζικά και γεωγραφικά συστήματα.Η εκμάθηση της χρήσης αυτού του API είναι ένα σημαντικό μέρος του .Μέσω αυτού του ιστολογίου, θα μάθουμε τις έννοιες του Spark GraphX, τα χαρακτηριστικά και τα στοιχεία του μέσω παραδειγμάτων και θα περάσουμε από μια πλήρη περίπτωση χρήσης του Flight Data Analytics χρησιμοποιώντας το GraphX.

Θα καλύψουμε τα ακόλουθα θέματα σε αυτό το blog Spark GraphX:





  1. Τι είναι τα γραφήματα;
  2. Χρήση περιπτώσεων υπολογισμού γραφήματος
  3. Τι είναι το Spark GraphX;
  4. Χαρακτηριστικά Spark GraphX
  5. Κατανόηση του GraphX ​​με παραδείγματα
  6. Χρήση περίπτωσης - Ανάλυση δεδομένων πτήσης χρησιμοποιώντας GraphX

Τι είναι τα γραφήματα;

Το γράφημα είναι μια μαθηματική δομή που αντιστοιχεί σε ένα σύνολο αντικειμένων στο οποίο ορισμένα ζεύγη των αντικειμένων σχετίζονται με κάποια έννοια. Αυτές οι σχέσεις μπορούν να αναπαρασταθούν χρησιμοποιώντας άκρα και κορυφές σχηματίζοντας ένα γράφημα. Οι κορυφές αντιπροσωπεύουν τα αντικείμενα και τα άκρα δείχνουν τις διάφορες σχέσεις μεταξύ αυτών των αντικειμένων.

Έννοιες γραφημάτων - Spark GraphX ​​Tutorial - EdurekaΦιγούρα: Tutorial Spark GraphX ​​- Κάθετες, άκρες και τρίδυμα σε γραφήματα



Στην επιστήμη των υπολογιστών, ένα γράφημα είναι ένας αφηρημένος τύπος δεδομένων που προορίζεται για την υλοποίηση των μη κατευθυνόμενων εννοιών γραφημάτων και κατευθυνόμενων γραφημάτων από τα μαθηματικά, ειδικά το πεδίο της θεωρίας γραφημάτων. Μία δομή δεδομένων γραφήματος μπορεί επίσης να συνδέεται σε κάθε άκρη τιμή άκρης , όπως μια συμβολική ετικέτα ή ένα αριθμητικό χαρακτηριστικό (κόστος, χωρητικότητα, μήκος,και τα λοιπά.).

Χρήση περιπτώσεων υπολογισμού γραφήματος

Οι ακόλουθες περιπτώσεις χρήσης δίνουν μια προοπτική στον υπολογισμό γραφημάτων και στο περαιτέρω πεδίο εφαρμογής άλλων λύσεων χρησιμοποιώντας γραφήματα.

  1. Σύστημα ανίχνευσης καταστροφών

    Τα γραφήματα μπορούν να χρησιμοποιηθούν για την ανίχνευση καταστροφών όπως τυφώνες, σεισμούς, τσουνάμι, δασικές πυρκαγιές και ηφαίστεια, ώστε να παρέχουν προειδοποιήσεις για να προειδοποιούν τους ανθρώπους.



  2. Κατάταξη σελίδας Η Κατάταξη σελίδας μπορεί να χρησιμοποιηθεί για την εύρεση των επιρροών σε οποιοδήποτε δίκτυο, όπως δίκτυο παραπομπής χαρτιού ή δίκτυο κοινωνικών μέσων.
  3. Ανίχνευση οικονομικής απάτης

    Η ανάλυση γραφημάτων μπορεί να χρησιμοποιηθεί για την παρακολούθηση χρηματοοικονομικών συναλλαγών και τον εντοπισμό ατόμων που εμπλέκονται σε χρηματοοικονομική απάτη και ξέπλυμα χρήματος.

  4. Επιχειρηματική Ανάλυση

    Τα γραφήματα, όταν χρησιμοποιούνται μαζί με το Machine Learning, βοηθούν στην κατανόηση των τάσεων αγοράς των πελατών. Π.χ. Uber, McDonald's κ.λπ.

  5. Γεωγραφικά Συστήματα Πληροφοριών

    Τα γραφήματα χρησιμοποιούνται εντατικά για την ανάπτυξη λειτουργιών σε συστήματα γεωγραφικών πληροφοριών, όπως οριοθέτηση λεκάνης απορροής και πρόβλεψη καιρού.

  6. Google Pregel

    Το Pregel είναι μια επεκτάσιμη και ανθεκτική σε σφάλματα πλατφόρμα της Google με ένα API που είναι αρκετά ευέλικτο για να εκφράζει αυθαίρετο γράφημααλγόριθμοι.

Τι είναι το Spark GraphX;

ΓράφημαX είναι το Spark API για γραφήματα και παράλληλους υπολογισμούς γραφημάτων. Περιλαμβάνει μια αυξανόμενη συλλογή αλγορίθμων γραφημάτων και κατασκευαστών για την απλοποίηση των εργασιών ανάλυσης γραφημάτων.


Το GraphX ​​επεκτείνει το Spark RDD με ένα γράφημα ελαστικής κατανεμημένης ιδιότητας.
Το γράφημα ιδιοτήτων είναι ένα κατευθυνόμενο πολλαπλό γράμμα που μπορεί να έχει πολλαπλά άκρα παράλληλα. Κάθε άκρη και κορυφή έχουν οριζόμενες από το χρήστη ιδιότητες που σχετίζονται με αυτό. Τα παράλληλα άκρα επιτρέπουν πολλαπλάσιασχέσεις μεταξύ των ίδιων κορυφών.

Χαρακτηριστικά Spark GraphX

Τα παρακάτω είναι τα χαρακτηριστικά του Spark GraphX:

  1. Ευκαμψία :
    Το Spark GraphX ​​λειτουργεί τόσο με γραφήματα όσο και με υπολογισμούς. Το GraphX ​​ενοποιεί το ETL (Extract, Transform & Load), την διερευνητική ανάλυση και τον επαναληπτικό υπολογισμό γραφημάτων σε ένα μόνο σύστημα. Μπορούμε να δούμε τα ίδια δεδομένα με γραφήματα και συλλογές, να μετασχηματίσουμε και να ενώσουμε γραφήματα με RDDs αποτελεσματικά και να γράψουμε προσαρμοσμένους επαναληπτικούς αλγόριθμους γραφημάτων χρησιμοποιώντας το Pregel API.
  2. Ταχύτητα :
    Το Spark GraphX ​​παρέχει συγκρίσιμη απόδοση με τα ταχύτερα εξειδικευμένα συστήματα επεξεργασίας γραφημάτων. Είναι συγκρίσιμο με τα ταχύτερα συστήματα γραφημάτων, διατηρώντας παράλληλα την ευελιξία, την ανοχή σφαλμάτων και την ευκολία χρήσης του Spark.
  3. Βιβλιοθήκη αναπτυσσόμενου αλγορίθμου :
    Μπορούμε να επιλέξουμε από μια αυξανόμενη βιβλιοθήκη αλγορίθμων γραφημάτων που έχει να προσφέρει το Spark GraphX. Μερικοί από τους δημοφιλείς αλγόριθμους είναι κατάταξη σελίδας, συνδεδεμένα στοιχεία, διάδοση ετικετών, SVD ++, ισχυρά συνδεδεμένα στοιχεία καιαριθμός τριγώνων.

Κατανόηση του GraphX ​​με παραδείγματα

Θα κατανοήσουμε τώρα τις έννοιες του Spark GraphX ​​χρησιμοποιώντας ένα παράδειγμα. Ας εξετάσουμε ένα απλό γράφημα όπως φαίνεται στην παρακάτω εικόνα.

Φιγούρα: Tutorial Spark GraphX ​​- Παράδειγμα γραφήματος

Κοιτάζοντας το γράφημα, μπορούμε να εξαγάγουμε πληροφορίες για τα άτομα (κορυφές) και τις σχέσεις μεταξύ τους (άκρα). Το γράφημα εδώ αντιπροσωπεύει τους χρήστες του Twitter και τους οποίους ακολουθούν στο Twitter. Για παράδειγμα Ο Μπομπ παρακολουθεί τους Ντέιβιντ και Άλις στο Twitter.

Ας εφαρμόσουμε το ίδιο χρησιμοποιώντας το Apache Spark. Πρώτον, θα εισαγάγουμε τις απαραίτητες τάξεις για το GraphX.

// Εισαγωγή των απαραίτητων κλάσεων εισαγωγή org.apache.spark._ εισαγωγή org.apache.spark.rdd.RDD εισαγωγή org.apache.spark.util.IntParam εισαγωγή org.apache.spark.graphx._ εισαγωγή org.apache.spark .graphx.util.GraphGenerators

Εμφάνιση κορυφών :Επιπλέον, θα εμφανίσουμε τώρα όλα τα ονόματα και τις ηλικίες των χρηστών (κορυφές).

val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) γράφημα val: Γράφημα [(String, Int), Int] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => ηλικία> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ name is $ age')}

Η έξοδος για τον παραπάνω κώδικα έχει ως εξής:

Δαβίδείναι42 Φρανείναιπενήντα Εκδείναι55 Κάρολοςείναι65

Εμφάνιση άκρων : Ας δούμε ποιο άτομο του αρέσει στο Twitter.

για (τριπλό<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

Η έξοδος για τον παραπάνω κώδικα έχει ως εξής:

Βαρίδιμου αρέσειΑλίκη Βαρίδιμου αρέσειΔαβίδ Κάρολοςμου αρέσειΒαρίδι Κάρολοςμου αρέσειΦραν Δαβίδμου αρέσειΑλίκη Εκδμου αρέσειΒαρίδι Εκδμου αρέσειΚάρολος Εκδμου αρέσειΦραν

Τώρα που έχουμε κατανοήσει τα βασικά του GraphX, ας βουτήξουμε λίγο πιο βαθιά και να εκτελέσουμε κάποιους προηγμένους υπολογισμούς.

Αριθμός οπαδών : Κάθε χρήστης στο γράφημα μας έχει διαφορετικό αριθμό οπαδών. Ας δούμε όλους τους ακόλουθους για κάθε χρήστη.

// Ορισμός κλάσης για πιο ξεκάθαρο μοντέλο κατηγορίας ιδιοτήτων χρήστη Χρήστης (όνομα: συμβολοσειρά, ηλικία: Int, inDeg: Int, outDeg: Int) // Δημιουργία χρήστη Graph valitialUserGraph: Graph [User, Int] = γράφημα. mapVertices {case (id, (name, age)) => Χρήστης (όνομα, ηλικία, 0, 0)} // Συμπλήρωση πληροφοριών πτυχίου val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Χρήστης (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Χρήστης (όνομα χρήστη, u.age, u.inDeg, outDegOpt.getOrElse (0))} για ((id, ιδιοκτησία)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

Η έξοδος για τον παραπάνω κώδικα έχει ως εξής:

Χρήστης έναςλέγεταιΑλίκηκαι του αρέσει2Ανθρωποι. Χρήστης 2λέγεταιΒαρίδικαι του αρέσει2Ανθρωποι. Χρήστης 3λέγεταιΚάρολοςκαι του αρέσειέναςΑνθρωποι. Χρήστης 4λέγεταιΔαβίδκαι του αρέσειέναςΑνθρωποι. Χρήστης 5λέγεταιΕκδκαι του αρέσει0Ανθρωποι. Χρήστης 6λέγεταιΦρανκαι του αρέσει2Ανθρωποι.

Παλαιότεροι ακόλουθοι : Μπορούμε επίσης να ταξινομήσουμε τους ακόλουθους με βάση τα χαρακτηριστικά τους. Ας βρούμε τους παλαιότερους οπαδούς κάθε χρήστη ανά ηλικία.

// Εύρεση του παλαιότερου οπαδού για κάθε χρήστη val oldFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Για κάθε άκρη στείλτε ένα μήνυμα στην κορυφή προορισμού με το χαρακτηριστικό της πηγής vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age)))), // Για να συνδυάσετε μηνύματα πάρτε το μήνυμα για τον παλαιότερο ακόλουθο (a, b) => εάν (a. _2> b._2) ένα άλλο b)

Η έξοδος για τον παραπάνω κώδικα έχει ως εξής:

Δαβίδείναι ο παλαιότερος οπαδός τουΑλίκη. Κάρολοςείναι ο παλαιότερος οπαδός τουΒαρίδι. Εκδείναι ο παλαιότερος οπαδός τουΚάρολος. Βαρίδιείναι ο παλαιότερος οπαδός τουΔαβίδ. Εκδδεν έχει οπαδούς. Κάρολοςείναι ο παλαιότερος οπαδός τουΦραν. 

Περίπτωση χρήσης: Ανάλυση δεδομένων πτήσης χρησιμοποιώντας το Spark GraphX

Τώρα που έχουμε κατανοήσει τις βασικές έννοιες του Spark GraphX, ας λύσουμε ένα πραγματικό πρόβλημα χρησιμοποιώντας το GraphX. Αυτό θα μας δώσει την εμπιστοσύνη να εργαστούμε σε οποιαδήποτε έργα Spark στο μέλλον.

Δήλωση προβλήματος : Για να αναλύσετε δεδομένα πτήσης σε πραγματικό χρόνο χρησιμοποιώντας το Spark GraphX, παρέχετε αποτελέσματα υπολογισμού σχεδόν σε πραγματικό χρόνο και οπτικοποιήστε τα αποτελέσματα χρησιμοποιώντας το Google Data Studio.

Use Case - Υπολογισμοί που πρέπει να γίνουν :

  1. Υπολογίστε τον συνολικό αριθμό διαδρομών πτήσης
  2. Υπολογίστε και ταξινομήστε τις μεγαλύτερες διαδρομές πτήσεων
  3. Εμφάνιση του αεροδρομίου με την υψηλότερη κορυφή
  4. Αναφέρετε τα πιο σημαντικά αεροδρόμια σύμφωνα με το PageRank
  5. Καταγράψτε τις διαδρομές με το χαμηλότερο κόστος πτήσης

Θα χρησιμοποιήσουμε το Spark GraphX ​​για τους παραπάνω υπολογισμούς και θα απεικονίσουμε τα αποτελέσματα χρησιμοποιώντας το Google Data Studio.

Χρήση περίπτωσης - σύνολο δεδομένων :

Φιγούρα: Use Case - Σύνολο δεδομένων πτήσης ΗΠΑ

Χρήση θήκης - Διάγραμμα ροής :

Η παρακάτω εικόνα εξηγεί με σαφήνεια όλα τα βήματα που περιλαμβάνονται στην Ανάλυση δεδομένων πτήσης.

Φιγούρα: Use Case - Διάγραμμα ροής της ανάλυσης δεδομένων πτήσης χρησιμοποιώντας το Spark GraphX

Use Case - Spark Implementation :

Προχωρώντας τώρα, ας εφαρμόσουμε το έργο μας χρησιμοποιώντας το Eclipse IDE για το Spark.

Βρείτε τον Ψευδο Κωδικό παρακάτω:

// Εισαγωγή των απαραίτητων κλάσεων εισαγωγή org.apache.spark._ ... εισαγωγή java.io.File αντικείμενο αεροδρόμιο {def main (args: Array [String]) {// Δημιουργία κατηγορίας Case Flight Flight class class Flight (dofM: String, dofW: String, ..., dist: Int) // Καθορισμός της συνάρτησης Parse String για την ανάλυση της εισόδου στην κατηγορία Flight parseFlight (str: String): Flight = {val line = str.split (',') Flight (γραμμή (0), γραμμή (1), ..., γραμμή (16) .toInt)} val conf = νέο SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = νέο SparkContext (conf) // Φόρτωση δεδομένων σε RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Αναλύστε τις γραμμές RDD των CSV σε μια RDD των κλάσεων πτήσεων val FlightsRDD = Map ParseFlight to Text RDD // Δημιουργία αεροδρομίων RDD με ID και Όνομα val airports = Χάρτης Flight OriginID και Origin airport.take (1) // Καθορισμός μιας προεπιλεγμένης κορυφής που ονομάζεται πουθενά και αντιστοίχιση ID αεροδρομίου για printlns val nowhere = 'nowhere' val airportMap = Χρήση της λειτουργίας χάρτη .collect.toList.toMap // Δημιουργία διαδρομών RDD με sourceID, destinationID και απόσταση διαδρομών val = πτήσειςRDD. Χρησιμοποιήστε τη Λειτουργία χάρτη .distinct Rout.take (2) // Δημιουργία άκρων RDD με sourceID, destinationID και απόσταση val edges = route.map {(Map OriginID και DestinationID) => Edge (org_id.toLong, dest_id.toLong, απόσταση)} edges.take (1) // Ορίστε το γράφημα και εμφανίστε μερικές κορυφές και ακμές val graph = Graph (Αεροδρόμια, άκρες και πουθενά) graph.vertices.take (2) graph.edges.take (2) // Query 1 - Find ο συνολικός αριθμός αεροδρομίων val numairports = Αριθμός Vertices // Ερώτημα 2 - Υπολογίστε τον συνολικό αριθμό διαδρομών; val numroutes = Number Of Edges // Ερώτημα 3 - Υπολογίστε αυτές τις διαδρομές με αποστάσεις πάνω από 1000 μίλια. παρακάτω ερωτήματα // Ερώτημα 4 - Ταξινόμηση και εκτύπωση των μεγαλύτερων διαδρομών // Ερώτημα 5 - Εμφάνιση κορυφών υψηλότερου βαθμού για εισερχόμενες και εξερχόμενες πτήσεις αεροδρομίων // Ερώτημα 6 - Λάβετε το όνομα του αεροδρομίου με τα αναγνωριστικά 10397 και 12478 // Ερώτημα 7 - Βρείτε το αεροδρόμιο με τις υψηλότερες εισερχόμενες πτήσεις // Ερώτημα 8 - Βρείτε το αεροδρόμιο με τις υψηλότερες εξερχόμενες πτήσεις // Ερώτημα 9 - Βρείτε τα πιο σημαντικά αεροδρόμια σύμφωνα με το PageRank // Ερώτημα 10 - Ταξινόμηση των αεροδρομίων κατά κατάταξη // Ερώτημα 11 - Εμφάνιση των περισσότερων σημαντικά αεροδρόμια // Ερώτημα 12 - Βρείτε τις διαδρομές με το χαμηλότερο κόστος πτήσης // Ερώτημα 13 - Βρείτε αεροδρόμια και το χαμηλότερο κόστος πτήσης // Ερώτημα 14 - Εμφάνιση κωδικών αεροδρομίου μαζί με το χαμηλότερο ταξινομημένο κόστος πτήσης

Χρήση περίπτωσης - Οπτικοποίηση αποτελεσμάτων :

Θα χρησιμοποιήσουμε το Google Data Studio για να απεικονίσουμε την ανάλυσή μας. Το Google Data Studio είναι ένα προϊόν στο Google Analytics 360 Suite. Θα χρησιμοποιήσουμε την υπηρεσία Geo Map για να χαρτογραφήσουμε τα Αεροδρόμια στις αντίστοιχες τοποθεσίες τους στον χάρτη των ΗΠΑ και να εμφανίσουμε την ποσότητα των μετρήσεων.

  1. Εμφάνιση του συνολικού αριθμού πτήσεων ανά αεροδρόμιο
  2. Εμφανίστε το μετρικό άθροισμα των διαδρομών προορισμού από κάθε αεροδρόμιο
  3. Εμφάνιση της συνολικής καθυστέρησης όλων των πτήσεων ανά αεροδρόμιο

μετατροπή από διπλό σε int java

Τώρα, ολοκληρώνεται το blog Spark GraphX. Ελπίζω να σας άρεσε να το διαβάζετε και το βρήκατε ενημερωτικό. Ρίξτε μια ματιά στο επόμενο blog στη σειρά Apache Spark στις για να ετοιμαστείτε στην αγορά στο Apache Spark.

Συνιστούμε τα ακόλουθα Κατάρτιση Apache Spark | Βίντεο ανάλυσης δεδομένων πτήσης από το Edureka για να ξεκινήσετε με:

Κατάρτιση Apache Spark | Ανάλυση δεδομένων πτήσης Spark GraphX ​​| Έντρεκα

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων και θα επικοινωνήσουμε μαζί σας το νωρίτερο.

Αν θέλετε να μάθετε το Spark και να δημιουργήσετε μια καριέρα στον τομέα του Spark και να αποκτήσετε εξειδίκευση για να εκτελέσετε Επεξεργασία Δεδομένων μεγάλης κλίμακας χρησιμοποιώντας RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​και Scala με πραγματικές περιπτώσεις χρήσης, δείτε τις διαδραστικές μας, ζωντανές -Σε σύνδεση εδώ, που έρχεται με υποστήριξη 24 * 7 για να σας καθοδηγήσει καθ 'όλη τη διάρκεια της μαθησιακής σας περιόδου