מדריך Spark GraphX ​​- ניתוח גרפים ב Apache Spark



בלוג הדרכה זה של GraphX ​​יציג בפניכם את Apache Spark GraphX, תכונותיו ורכיביו כולל פרויקט ניתוח נתוני טיסה.

GraphX הוא ה- API של Apache Spark עבור גרפים וחישוב מקביל גרפי. GraphX ​​מאחד תהליך ETL (Extract, Transform & Load), ניתוח חקר וחישוב גרפים איטרטיביים בתוך מערכת אחת. ניתן לראות את השימוש בגרפים בחברים של פייסבוק, בקשרים של לינקדאין, בנתבים באינטרנט, בקשרים בין גלקסיות לכוכבים באסטרופיזיקה ובמפות של גוגל. למרות שמושג חישוב הגרפים נראה פשוט מאוד, היישומים של גרפים הם ממש בלתי מוגבלים למקרי שימוש בזיהוי אסונות, בנקאות, שוק המניות, בנקאות ומערכות גיאוגרפיות רק כדי שם כמה.לימוד השימוש ב- API זה הוא חלק חשוב ב- .דרך בלוג זה נלמד את המושגים של Spark GraphX, תכונותיו ורכיביו באמצעות דוגמאות ונעבור מקרה שימוש מלא של ניתוח נתוני Flight באמצעות GraphX.

אנו נעסוק בנושאים הבאים בבלוג זה של Spark GraphX:





  1. מהם גרפים?
  2. השתמש במקרים של חישוב גרפים
  3. מה זה Spark GraphX?
  4. תכונות Spark GraphX
  5. הבנת GraphX ​​עם דוגמאות
  6. השתמש במקרה - ניתוח נתוני טיסה באמצעות GraphX

מהם גרפים?

גרף הוא מבנה מתמטי המסתכם בקבוצת אובייקטים שבהם זוגות מסוימים של האובייקטים קשורים במובן מסוים. ניתן לייצג קשרים אלה באמצעות קצוות וקודקודים היוצרים גרף. הקודקודים מייצגים את האובייקטים והקצוות מציגים את היחסים השונים בין אותם אובייקטים.

מושגי גרף - מדריך Spark GraphX ​​- אדוריקהדמות: מדריך Spark GraphX ​​- קודקודים, קצוות ושלישיות בגרפים



במדעי המחשב, גרף הוא סוג נתונים מופשט שנועד ליישם את הגרף הלא מכוון ומושגי גרף מכוונים ממתמטיקה, במיוחד תחום תורת הגרפים. מבנה נתוני גרף עשוי גם לשייך לכל קצה ערך קצה , כגון תווית סמלית או תכונה מספרית (עלות, קיבולת, אורך,וכו.).

השתמש במקרים של חישוב גרפים

מקרי השימוש הבאים נותנים נקודת מבט לחישוב גרפי והיקף נוסף ליישום פתרונות אחרים באמצעות גרפים.

  1. מערכת גילוי אסונות

    ניתן להשתמש בתרשימים לזיהוי אסונות כמו הוריקנים, רעידות אדמה, צונאמי, שריפות יערות והרי געש כדי לספק אזהרות להתריע על אנשים.



  2. דירוג דף ניתן להשתמש בדירוג הדף למציאת המשפיעים בכל רשת כגון רשת ציטוטים בנייר או רשת מדיה חברתית.
  3. איתור הונאות פיננסיות

    ניתן להשתמש בניתוח גרפים לניטור עסקאות פיננסיות ולאיתור אנשים המעורבים בהונאות פיננסיות והלבנת הון.

  4. ניתוח עסקי

    גרפים, בשימוש יחד עם Machine Learning, מסייעים בהבנת מגמות רכישת הלקוחות. לְמָשָׁל. אובר, מקדונלד'ס וכו '.

  5. מערכות מידע גיאוגרפיות

    תרשימים משמשים באופן אינטנסיבי לפיתוח פונקציות במערכות מידע גיאוגרפיות כמו תיחום קו פרשת מים וחיזוי מזג אוויר.

  6. Google Pregel

    Pregel היא הפלטפורמה הניתנת להרחבה וסובלנית של גוגל עם ממשק API הגמיש מספיק לביטוי גרף שרירותיאלגוריתמים.

מה זה Spark GraphX?

GraphX הוא ה- API של Spark עבור גרפים וחישוב מקביל גרפי. הוא כולל אוסף הולך וגדל של אלגוריתמים ובוני גרפים לפשט משימות ניתוח גרפים.


GraphX ​​מרחיב את ה- Spark RDD באמצעות גרף נכסים מבוזר גמיש.
גרף המאפיינים הוא מולטיגרף מכוון שיכול להיות בעל מספר קצוות במקביל. לכל קצה וקודקוד יש מאפיינים שהוגדרו על ידי המשתמש המשויכים אליו. הקצוות המקבילים מאפשרים מרובהיחסים בין אותם קודקודים.

תכונות Spark GraphX

להלן התכונות של Spark GraphX:

  1. גְמִישׁוּת :
    Spark GraphX ​​עובד גם עם גרפים וגם עם חישובים. GraphX ​​מאחד ETL (Extract, Transform & Load), ניתוח חקר וחישוב גרפים איטרטיביים בתוך מערכת אחת. אנו יכולים להציג את אותם נתונים כמו גרפים ואוספים, לשנות ולהצטרף גרפים עם RDD ביעילות ולכתוב אלגוריתמי גרפים איטרטיביים מותאמים אישית באמצעות ממשק ה- API של Pregel.
  2. מְהִירוּת :
    Spark GraphX ​​מספק ביצועים דומים למערכות העיבוד הגרפי המתמחות המהירות ביותר. ניתן להשוות אותו עם מערכות הגרפים המהירות ביותר תוך שמירה על הגמישות, סובלנות התקלות וקלות השימוש של Spark.
  3. ספריית אלגוריתמים גוברת :
    אנו יכולים לבחור מתוך ספרייה הולכת וגדלה של אלגוריתמי גרפים שיש ל- Spark GraphX ​​להציע. חלק מהאלגוריתמים הפופולריים הם דירוג עמודים, רכיבים מחוברים, התפשטות תוויות, SVD ++, רכיבים מחוברים חזק וספירת משולש.

הבנת GraphX ​​עם דוגמאות

כעת נבין את המושגים של Spark GraphX ​​בעזרת דוגמה. הבה נבחן גרף פשוט כפי שמוצג בתמונה למטה.

דמות: מדריך Spark GraphX ​​- דוגמה לגרף

כשמסתכלים על הגרף נוכל לחלץ מידע על האנשים (קודקודים) והיחסים ביניהם (קצוות). הגרף כאן מייצג את משתמשי הטוויטר ואתם הם עוקבים בטוויטר. עבור למשל בוב עוקב אחר דייוויד ואליס בטוויטר.

תן לנו ליישם את אותו הדבר באמצעות 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 RD: RDD [(ארוך, (מחרוזת, Int))] = sc.parallelize (vertexArray) edge edge VAL RD: RDD [Edge [Int]] = sc.parallelize (edgeArray) גרף val: גרף [(מחרוזת, Int), Int] = גרף (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => age> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ name is $ age')}

הפלט של הקוד הנ'ל הוא להלן:

דודהוא42 פראןהואחמישים אדהוא55 צ'רליהוא65

הצגת קצוות : בואו נסתכל איזה אדם אוהב את מי בטוויטר.

עבור (שלישיה<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

הפלט של הקוד הנ'ל הוא להלן:

העמסת שיטות ועקיפת שיטות בג'אווה
בובאוהבאליס בובאוהבדוד צ'רליאוהבבוב צ'רליאוהבפראן דודאוהבאליס אדאוהבבוב אדאוהבצ'רלי אדאוהבפראן

עכשיו, אחרי שהבנו את היסודות של GraphX, בואו נצלול קצת יותר לעומק ונבצע כמה חישובים מתקדמים על אותו הדבר.

מספר העוקבים : לכל משתמש בגרף שלנו יש מספר עוקבים אחר. בואו נסתכל על כל העוקבים עבור כל משתמש.

// הגדרת מחלקה כדי לדגמן בצורה ברורה יותר את מחלקת המקרים של מאפייני המשתמש (שם: מחרוזת, גיל: Int, inDeg: Int, outDeg: Int) // יצירת משתמש גרף val initialUserGraph: גרף [משתמש, Int] = גרף. mapVertices {case (id, (name, age)) => User (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, property)<- 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אֲנָשִׁים.

העוקבים הוותיקים ביותר : אנחנו יכולים גם למיין את העוקבים לפי המאפיינים שלהם. בואו למצוא את העוקבים הוותיקים ביותר של כל משתמש לפי גיל.

// מציאת העוקב הוותיק ביותר עבור כל משתמש ואל oldFollower: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// לכל קצה שלחו הודעה לקודקוד היעד עם תכונת המקור edge edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // כדי לשלב הודעות קח את ההודעה לעוקב המבוגר יותר (a, b) => אם (a. _2> ב._2) אחר ב)

הפלט של הקוד הנ'ל הוא להלן:

דודהוא החסיד הוותיק ביותר שלאליס. צ'רליהוא החסיד הוותיק ביותר שלבוב. אדהוא החסיד הוותיק ביותר שלצ'רלי. בובהוא החסיד הוותיק ביותר שלדוד. אדאין לו עוקבים. צ'רליהוא החסיד הוותיק ביותר שלפראן. 

מקרה מקרה: ניתוח נתוני טיסה באמצעות Spark GraphX

כעת לאחר שהבנו את מושגי הליבה של Spark GraphX, בואו נפתור בעיה אמיתית באמצעות GraphX. זה יעזור לנו לתת את הביטחון לעבוד על כל פרויקטים של Spark בעתיד.

ג'אווה בכוחו של המפעיל

הצהרת בעיה : כדי לנתח נתוני טיסה בזמן אמת באמצעות Spark GraphX, ספק תוצאות חישוב כמעט בזמן אמת והמחיש את התוצאות באמצעות Google Data Studio.

שימוש במקרה - חישובים שיש לבצע :

  1. חישוב המספר הכולל של נתיבי הטיסה
  2. חישב ומיין את נתיבי הטיסה הארוכים ביותר
  3. הצג את שדה התעופה עם קודקוד הדרגה הגבוהה ביותר
  4. ציין את שדות התעופה החשובים ביותר על פי PageRank
  5. ציין את המסלולים עם עלויות הטיסה הנמוכות ביותר

אנו נשתמש ב- Spark GraphX ​​לצורך החישובים הנ'ל ונמחיש את התוצאות באמצעות Google Data Studio.

השתמש במקרה - מערך נתונים :

דמות: השתמש במקרה - מערך טיסות בארה'ב

שימוש במקרה - תרשים זרימה :

האיור הבא מסביר בבירור את כל השלבים הכרוכים בניתוח נתוני הטיסה שלנו.

דמות: שימוש במקרה - תרשים זרימה של ניתוח נתוני טיסה באמצעות Spark GraphX

שימוש במקרה - יישום ניצוץ :

קדימה, עכשיו בואו נניח את הפרויקט שלנו באמצעות Eclipse IDE for Spark.

מצא את קוד הפסאודו למטה:

// ייבוא ​​המחלקות הדרושות ייבא org.apache.spark._ ... ייבא java.io.File אובייקט שדה תעופה {def main (טענות: Array [String]) {// יצירת מחלקת מקרה Case Flight Flight Flight (dofM: מחרוזת, dofW: מחרוזת, ..., dist: Int) // הגדרת פונקציית מחרוזת ניתוח לניתוח קלט למחלקת טיסה def parseFlight (str: String): Flight = {val line = str.split (',') Flight (שורה (0), שורה (1), ..., שורה (16) .toInt)} val conf = חדש SparkConf (). setAppName ('שדה תעופה'). setMaster ('local [2]') val sc = SparkContext חדש (conf) // טען את הנתונים ל- RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // ניתח את RDD של קווי CSV לתוך RDD של שיעורי טיסה val FlightsRDD = מפה ParseFlight לטקסט RDD // צור שדות תעופה RDD עם מזהה ושם val שדות תעופה = מפה טיסות OriginID ו- Origin שדות תעופה. קח (1) // הגדרת קודקוד ברירת מחדל הנקרא בשום מקום ומיפוי מזהה שדה תעופה עבור printlns val nowhere = 'שום מקום' val airportMap = השתמש בפונקציית מפה .collect.toList.toMap // צור מסלולים RDD עם נתיבי מקור מזהה, יעד מזהה ומרחק מרחק = טיסות RDD. השתמש בפונקציית מפה. מסלולים ברורים. לקחת (2) // צור קצוות RDD עם מקור מזהה, יעד מזהה ושולי שולי מרחק = מסלולים. מפה {(מפה מקור מזהה ויעד יעד) => קצה (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // הגדר את הגרף והצג כמה קודקודים וקצוות val graph = גרף (שדות תעופה, קצוות ושום מקום) graph.vertices.take (2) graph.edges.take (2) // שאילתה 1 - מצא המספר הכולל של שדות התעופה val numairports = מספר הקודקודים // שאילתה 2 - חישוב המספר הכולל של המסלולים? val numroutes = מספר הקצוות // שאילתה 3 - חשב את המסלולים האלה עם מרחקים יותר מ 1000 מיילים graph.edges.filter {קבל את מרחק הקצה) => מרחק> 1000}. קח (3) // כתוב באופן דומה קוד Scala עבור להלן שאילתות // שאילתה 4 - מיין והדפס את המסלולים הארוכים ביותר // שאילתה 5 - הצג קודקודים בדרגה הגבוהה ביותר לטיסות נכנסות ויוצאות של שדות תעופה // שאילתה 6 - קבל את שם שדה התעופה עם תעודות 10397 ו -12478 // שאילתה 7 - מצא את שדה תעופה עם הטיסות הנכנסות הגבוהות ביותר // שאילתה 8 - מצא את שדה התעופה עם הטיסות היוצאות הגבוהות ביותר // שאילתה 9 - מצא את שדות התעופה החשובים ביותר על פי עמוד דירוג // שאילתה 10 - מיין את שדות התעופה לפי דירוג // שאילתה 11 - הצג הכי הרבה שדות תעופה חשובים // שאילתה 12 - מצא את המסלולים עם עלויות הטיסה הנמוכות ביותר // שאילתה 13 - מצא שדות תעופה ועלויות הטיסה הנמוכות ביותר שלהם // שאילתה 14 - הצג קודי שדה תעופה יחד עם עלויות טיסה נמוכות ממוינות

שימוש במקרה - הדמיה של תוצאות :

אנו נשתמש ב- Google Data Studio כדי לדמיין את הניתוח שלנו. Google Data Studio הוא מוצר תחת Google Analytics 360 Suite. אנו נשתמש בשירות Geo Map כדי למפות את שדות התעופה במיקומם בהתאמה על מפת ארה'ב ולהציג את כמות המדדים.

  1. הצג את המספר הכולל של טיסות לשדה תעופה
  2. הצג את הסכום המטרי של נתיבי יעד מכל שדה תעופה
  3. הצג את העיכוב הכולל של כל הטיסות לשדה תעופה

כעת, זה מסכם את הבלוג Spark GraphX. אני מקווה שנהניתם לקרוא אותו ומצאתם את זה אינפורמטיבי. האם בדוק את הבלוג הבא בסדרת Apache Spark שלנו להפוך להיות מוכנים לשוק ב- Apache Spark.

אנו ממליצים על הדברים הבאים אימון ניצוצות אפאצ'י | סרטון ניתוח נתוני טיסה מאדוריקה מלכתחילה:

אימון ניצוצות אפאצ'י | ניתוח נתוני טיסה של Spark GraphX ​​| אדוריקה

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ונחזור אליך בהקדם.

אם ברצונך ללמוד Spark ולבנות קריירה בתחום ה- Spark ולבנות מומחיות לביצוע עיבוד נתונים בקנה מידה גדול באמצעות RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​ו- Scala עם מקרי שימוש אמיתיים, בדוק את האינטראקטיבי שלנו, בשידור חי -באינטרנט כאן, שמגיע עם תמיכה 24 * 7 שתדריך אותך לאורך כל תקופת הלמידה שלך.