برنامج Spark GraphX ​​التعليمي - تحليلات الرسم البياني في Apache Spark



ستقدم لك مدونة GraphX ​​التعليمية هذه إلى Apache Spark GraphX ​​وميزاتها ومكوناتها بما في ذلك مشروع تحليل بيانات الطيران.

جرافكس هي واجهة برمجة تطبيقات Apache Spark للرسوم البيانية والحسابات المتوازية. توحد GraphX ​​عملية ETL (الاستخراج والتحويل والتحميل) والتحليل الاستكشافي وحساب الرسم البياني التكراري داخل نظام واحد. يمكن رؤية استخدام الرسوم البيانية في أصدقاء Facebook ، واتصالات LinkedIn ، وأجهزة التوجيه على الإنترنت ، والعلاقات بين المجرات والنجوم في الفيزياء الفلكية وخرائط Google. على الرغم من أن مفهوم حساب الرسم البياني يبدو بسيطًا للغاية ، إلا أن تطبيقات الرسوم البيانية لا حدود لها حرفيًا مع حالات الاستخدام في اكتشاف الكوارث ، والخدمات المصرفية ، وسوق الأوراق المالية ، والبنوك والأنظمة الجغرافية على سبيل المثال لا الحصر.يعد تعلم استخدام واجهة برمجة التطبيقات جزءًا مهمًا من .من خلال هذه المدونة ، سوف نتعلم مفاهيم Spark GraphX ​​وميزاتها ومكوناتها من خلال أمثلة ونستعرض حالة استخدام كاملة لتحليلات بيانات الطيران باستخدام GraphX.

سنغطي الموضوعات التالية في مدونة Spark GraphX ​​هذه:





  1. ما هي الرسوم البيانية؟
  2. حالات استخدام حساب الرسم البياني
  3. ما هو Spark GraphX؟
  4. ميزات شرارة GraphX
  5. فهم GraphX ​​بالأمثلة
  6. حالة الاستخدام - تحليل بيانات الطيران باستخدام GraphX

ما هي الرسوم البيانية؟

الرسم البياني هو بنية رياضية تصل إلى مجموعة من الكائنات ترتبط فيها بعض أزواج الكائنات بمعنى ما. يمكن تمثيل هذه العلاقات باستخدام الحواف والرؤوس التي تشكل رسمًا بيانيًا. تمثل الرؤوس الكائنات وتظهر الحواف العلاقات المختلفة بين تلك الكائنات.

مفاهيم الرسم البياني - دروس Spark GraphX ​​- Edurekaالشكل: Spark GraphX ​​Tutorial - الرؤوس والحواف والثلاثية في الرسوم البيانية



في علوم الكمبيوتر ، الرسم البياني هو نوع بيانات مجردة يهدف إلى تنفيذ الرسم البياني غير المباشر ومفاهيم الرسم البياني الموجه من الرياضيات ، وتحديداً مجال نظرية الرسم البياني. قد يرتبط بعض هيكل بيانات الرسم البياني أيضًا بكل حافة قيمة الحافة ، مثل تسمية رمزية أو سمة رقمية (التكلفة ، السعة ، الطول ،إلخ.).

حالات استخدام حساب الرسم البياني

تعطي حالات الاستخدام التالية منظورًا لحساب الرسم البياني ونطاقًا إضافيًا لتنفيذ حلول أخرى باستخدام الرسوم البيانية.

  1. نظام الكشف عن الكوارث

    يمكن استخدام الرسوم البيانية للكشف عن الكوارث مثل الأعاصير والزلازل والتسونامي وحرائق الغابات والبراكين وذلك لتقديم تحذيرات لتنبيه الناس.



  2. رتبة صفحة يمكن استخدام Page Rank في العثور على المؤثرين في أي شبكة مثل شبكة الاستشهادات الورقية أو شبكة التواصل الاجتماعي.
  3. كشف الاحتيال المالي

    يمكن استخدام تحليل الرسم البياني لمراقبة المعاملات المالية واكتشاف الأشخاص المتورطين في الاحتيال المالي وغسيل الأموال.

  4. تحليل الأعمال

    تساعد الرسوم البيانية ، عند استخدامها مع التعلم الآلي ، في فهم اتجاهات شراء العملاء. على سبيل المثال أوبر وماكدونالدز ، إلخ.

  5. نظم المعلومات الجغرافية

    تُستخدم الرسوم البيانية بشكل مكثف لتطوير وظائف أنظمة المعلومات الجغرافية مثل ترسيم مستجمعات المياه والتنبؤ بالطقس.

    أدوار ومسؤوليات مسؤول نظام لينوكس
  6. جوجل بريجيل

    Pregel هو نظام أساسي من Google قابل للتطوير ومتحمل للأخطاء مع واجهة برمجة تطبيقات تتسم بالمرونة الكافية للتعبير عن رسم بياني عشوائيالخوارزميات.

ما هو Spark GraphX؟

جرافكس هو Spark API للرسوم البيانية والحساب المتوازي للرسم البياني. يتضمن مجموعة متزايدة من خوارزميات الرسم البياني والبناة لتبسيط مهام تحليل الرسم البياني.


تقوم GraphX ​​بتوسيع Spark RDD باستخدام رسم بياني مرن للخصائص الموزعة.
الرسم البياني للخاصية هو رسم بياني متعدد موجه يمكن أن يكون له حواف متعددة على التوازي. كل حافة ورأس لها خصائص محددة من قبل المستخدم مرتبطة بها. حواف متوازية تسمح متعددةالعلاقات بين نفس الرؤوس.

ميزات شرارة GraphX

فيما يلي ميزات Spark GraphX:

  1. المرونة :
    تعمل Spark GraphX ​​مع كل من الرسوم البيانية والحسابات. توحد GraphX ​​ETL (الاستخراج والتحويل والتحميل) والتحليل الاستكشافي وحساب الرسم البياني التكراري داخل نظام واحد. يمكننا عرض نفس البيانات مثل كل من الرسوم البيانية والمجموعات ، وتحويل الرسوم البيانية وضمها باستخدام RDDs بكفاءة وكتابة خوارزميات الرسم البياني التكراري المخصصة باستخدام Pregel API.
  2. سرعة :
    يوفر Spark GraphX ​​أداءً مشابهًا لأسرع أنظمة معالجة الرسوم البيانية المتخصصة. يمكن مقارنته بأسرع أنظمة الرسوم البيانية مع الاحتفاظ بمرونة Spark وتحمل الأخطاء وسهولة الاستخدام.
  3. تزايد مكتبة الخوارزمية :
    يمكننا الاختيار من مكتبة متنامية من خوارزميات الرسم البياني التي يقدمها Spark GraphX. بعض الخوارزميات الشائعة هي تصنيف الصفحة ، والمكونات المتصلة ، وانتشار الملصقات ، و SVD ++ ، والمكونات المتصلة بقوة والعد المثلث.

فهم GraphX ​​بالأمثلة

سوف نفهم الآن مفاهيم Spark GraphX ​​باستخدام مثال. دعونا نفكر في رسم بياني بسيط كما هو موضح في الصورة أدناه.

الشكل: شرارة GraphX ​​التعليمي - مثال على الرسم البياني

بالنظر إلى الرسم البياني ، يمكننا استخراج معلومات عن الأشخاص (الرؤوس) والعلاقات بينهم (الحواف). يمثل الرسم البياني هنا مستخدمي Twitter ومن يتابعونهم على Twitter. على سبيل المثال بوب يتابع دافيد وأليس على تويتر.

دعونا ننفذ نفس الشيء باستخدام Apache Spark. أولاً ، سنقوم باستيراد الفئات الضرورية لـ GraphX.

// استيراد الفئات الضرورية 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

عرض القمم :علاوة على ذلك ، سنعرض الآن جميع أسماء وأعمار المستخدمين (الرؤوس).

val vertexRDD: RDD [(Long، (String، Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val الرسم البياني: الرسم البياني [(String، Int)، Int] = رسم بياني (vertexRDD، edgeRDD) graph.vertices.filter {case (id، (name، age)) => age> 30} .collect.foreach {case (id، (name، age)) => println ( s '$ name هو $ age')}

إخراج الكود أعلاه كما يلي:

ديفيديكون42 فرانيكونخمسون إديكون55 تشارلييكون65

عرض الحواف : دعونا نلقي نظرة على الشخص الذي يحب من على Twitter.

لـ (ثلاثة توائم<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

إخراج الكود أعلاه كما يلي:

بوبالإعجاباتأليس بوبالإعجاباتديفيد تشارليالإعجاباتبوب تشارليالإعجاباتفران ديفيدالإعجاباتأليس إدالإعجاباتبوب إدالإعجاباتتشارلي إدالإعجاباتفران

الآن بعد أن فهمنا أساسيات GraphX ​​، دعنا نتعمق قليلاً ونقوم ببعض العمليات الحسابية المتقدمة على نفسه.

عدد المتابعين : لكل مستخدم في الرسم البياني عدد مختلف من المتابعين. دعونا نلقي نظرة على جميع المتابعين لكل مستخدم.

// تحديد فئة لنمذجة فئة حالة خاصية المستخدم بشكل أكثر وضوحًا المستخدم (الاسم: سلسلة ، العمر: Int ، inDeg: Int ، outDeg: Int) // إنشاء مستخدم Graph val initialUserGraph: Graph [User، Int] = رسم بياني. mapVertices {case (id، (name، age)) => المستخدم (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.name، 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اشخاص.

أقدم المتابعين : يمكننا أيضًا تصنيف المتابعين حسب خصائصهم. دعونا نجد المتابعين الأقدم لكل مستخدم حسب العمر.

// العثور على المتابع الأقدم لكل مستخدم Val الأقدم المتابع: VertexRDD [(String، Int)] = userGraph.mapReduceTriplets [(String، Int)] (// بالنسبة لكل حافة أرسل رسالة إلى قمة الوجهة مع سمة المصدر vertex edge => Iterator ((edge.dstId، (edge.srcAttr.name، edge.srcAttr.age)))) ، // لدمج الرسائل خذ الرسالة للمتابع الأقدم (a، b) => if (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 لـ Spark.

ابحث عن الرمز الزائف أدناه:

// استيراد الفئات الضرورية import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// Creating a Case Class Flight class Flight (dofM: String، dofW: String، ...، dist: Int) // تحديد دالة Parse String لتحليل الإدخال في Flight class def parseFlight (str: String): Flight = {val line = str.split ('،') Flight (السطر (0) ، السطر (1) ، ... ، السطر (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = new SparkContext (conf) // تحميل البيانات في RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // تحليل RDD لخطوط CSV إلى RDD لفئات الطيران val FlightsRDD = Map ParseFlight to Text RDD // إنشاء المطارات RDD بالمعرف واسم المطارات = خريطة أصل الرحلة والمطارات الأصلية. Take (1) // تحديد قمة افتراضية تسمى أي مكان وتعيين معرف المطار لـ printlns val nohere = 'لا مكان' val airportMap = استخدام Map Function .collect.toList.toMap // إنشاء مسارات RDD مع معرف المصدر ، معرف الوجهة ، ومسارات المسافة = flightRDD. استخدم Map Function .distways.take (2) // Create edges RDD with sourceID، destinationID and Distance val edges = route.map {(Map OriginID and DestinationID) => Edge (org_id.toLong، dest_id.toLong، Distance)} edges.take (1) // حدد الرسم البياني واعرض بعض الرؤوس والحواف فال الرسم البياني = الرسم البياني (المطارات والحواف ولا مكان آخر) رسم بياني. 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 - ابحث عن المطارات الأكثر أهمية وفقًا لـ PageRank // الاستعلام 10 - رتب المطارات حسب الترتيب // الاستعلام 11 - اعرض أكثر المطارات الهامة // الاستعلام 12 - ابحث عن المسارات بأقل تكاليف الطيران // الاستعلام 13 - البحث عن المطارات وأقل تكاليف الطيران // الاستعلام 14 - عرض أكواد المطارات جنبًا إلى جنب مع أقل تكاليف الطيران المصنفة

حالة الاستخدام - تصور النتائج :

سنستخدم Google Data Studio لتصور تحليلنا. Google Data Studio هو منتج ضمن Google Analytics 360 Suite. سنستخدم خدمة الخريطة الجغرافية لرسم خريطة للمطارات في مواقعها على خريطة الولايات المتحدة الأمريكية وعرض كمية المقاييس.

  1. عرض العدد الإجمالي للرحلات لكل مطار
  2. اعرض المجموع المتري لمسارات الوجهة من كل مطار
  3. عرض إجمالي التأخير لجميع الرحلات الجوية لكل مطار

الآن ، هذا يختتم مدونة Spark GraphX. أتمنى أن تكون قد استمتعت بقراءتها ووجدتها مفيدة. تحقق من المدونة التالية في سلسلة Apache Spark على لتصبح جاهزة للسوق في Apache Spark.

نوصي بما يلي تدريب اباتشي سبارك | فيديو تحليل بيانات الطيران من Edureka لتبدأ بـ:

تدريب اباتشي سبارك | Spark GraphX ​​تحليل بيانات الطيران | إدوريكا

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات وسنعاود الاتصال بك في أقرب وقت ممكن.

إذا كنت ترغب في تعلم Spark وبناء مهنة في مجال Spark وبناء الخبرة لأداء معالجة البيانات على نطاق واسع باستخدام RDD و Spark Streaming و SparkSQL و MLlib و GraphX ​​و Scala مع حالات استخدام Real Life ، تحقق من تفاعلنا المباشر ، -عبر الانترنت هنا، يأتي مع دعم 24 * 7 لإرشادك طوال فترة التعلم.

فرز وظيفة c ++