บทช่วยสอน Spark GraphX ​​- การวิเคราะห์กราฟใน Apache Spark



บล็อก GraphX ​​Tutorial นี้จะแนะนำให้คุณรู้จักกับ Apache Spark GraphX ​​คุณลักษณะและส่วนประกอบต่างๆรวมถึงโครงการวิเคราะห์ข้อมูลเที่ยวบิน

GraphX คือ API ของ Apache Spark สำหรับกราฟและการคำนวณแบบกราฟขนาน GraphX ​​รวมกระบวนการ ETL (Extract, Transform & Load) การวิเคราะห์เชิงสำรวจและการคำนวณกราฟซ้ำภายในระบบเดียว การใช้กราฟสามารถเห็นได้ในเพื่อนของ Facebook, การเชื่อมต่อของ LinkedIn, เราเตอร์ของอินเทอร์เน็ต, ความสัมพันธ์ระหว่างกาแลคซีและดวงดาวในฟิสิกส์ดาราศาสตร์และแผนที่ของ Google แม้ว่าแนวคิดของการคำนวณกราฟจะดูเรียบง่าย แต่การประยุกต์ใช้กราฟนั้นไร้ขีด จำกัด อย่างแท้จริงสำหรับกรณีการใช้งานในการตรวจจับภัยพิบัติการธนาคารตลาดหุ้นการธนาคารและระบบทางภูมิศาสตร์เพียงเพื่อชื่อไม่กี่การเรียนรู้การใช้ API นี้เป็นส่วนสำคัญของไฟล์ .ในบล็อกนี้เราจะได้เรียนรู้แนวคิดของ Spark GraphX ​​คุณลักษณะและส่วนประกอบผ่านตัวอย่างและดูกรณีการใช้งานทั้งหมดของ Flight Data Analytics โดยใช้ GraphX

เราจะกล่าวถึงหัวข้อต่อไปนี้ในบล็อก Spark GraphX:





  1. กราฟคืออะไร?
  2. ใช้กรณีของการคำนวณกราฟ
  3. Spark GraphX ​​คืออะไร?
  4. คุณสมบัติ Spark GraphX
  5. การทำความเข้าใจ GraphX ​​ด้วยตัวอย่าง
  6. Use Case - การวิเคราะห์ข้อมูลเที่ยวบินโดยใช้ GraphX

กราฟคืออะไร?

กราฟเป็นโครงสร้างทางคณิตศาสตร์ที่มีส่วนประกอบของชุดของวัตถุซึ่งบางคู่ของวัตถุมีความสัมพันธ์กันในบางแง่ ความสัมพันธ์เหล่านี้สามารถแสดงได้โดยใช้ขอบและจุดยอดสร้างกราฟ จุดยอดเป็นตัวแทนของวัตถุและขอบจะแสดงความสัมพันธ์ต่างๆระหว่างวัตถุเหล่านั้น

แนวคิดเกี่ยวกับกราฟ - การสอน Spark GraphX ​​- Edurekaรูป: บทช่วยสอน Spark GraphX ​​- จุดยอดขอบและสามเท่าในกราฟ



ในวิทยาการคอมพิวเตอร์กราฟเป็นประเภทข้อมูลนามธรรมที่มีขึ้นเพื่อใช้กราฟที่ไม่ได้กำหนดทิศทางและแนวคิดกราฟที่กำหนดทิศทางจากคณิตศาสตร์โดยเฉพาะในสาขาทฤษฎีกราฟ โครงสร้างข้อมูลกราฟอาจเชื่อมโยงกับขอบแต่ละด้านด้วย ค่าขอบ เช่นป้ายสัญลักษณ์หรือแอตทริบิวต์ตัวเลข (ต้นทุนความจุความยาวฯลฯ ).

ใช้กรณีของการคำนวณกราฟ

กรณีการใช้งานต่อไปนี้ให้มุมมองเกี่ยวกับการคำนวณกราฟและขอบเขตเพิ่มเติมในการนำโซลูชันอื่น ๆ ไปใช้โดยใช้กราฟ

  1. ระบบตรวจจับภัยพิบัติ

    กราฟสามารถใช้เพื่อตรวจจับภัยพิบัติเช่นพายุเฮอริเคนแผ่นดินไหวสึนามิไฟป่าและภูเขาไฟเพื่อให้คำเตือนแจ้งเตือนประชาชน



  2. จัดอันดับหน้า Page Rank สามารถใช้ในการค้นหาผู้มีอิทธิพลในเครือข่ายต่างๆเช่นเครือข่ายกระดาษอ้างอิงหรือเครือข่ายโซเชียลมีเดีย
  3. การตรวจจับการฉ้อโกงทางการเงิน

    การวิเคราะห์กราฟสามารถใช้เพื่อตรวจสอบธุรกรรมทางการเงินและตรวจจับผู้ที่เกี่ยวข้องกับการฉ้อโกงทางการเงินและการฟอกเงิน

  4. การวิเคราะห์ธุรกิจ

    กราฟเมื่อใช้ร่วมกับ Machine Learning จะช่วยในการทำความเข้าใจแนวโน้มการซื้อของลูกค้า เช่น. Uber, McDonald’s ฯลฯ

  5. ระบบสารสนเทศภูมิศาสตร์

    กราฟถูกนำมาใช้อย่างเข้มข้นเพื่อพัฒนาฟังก์ชันบนระบบสารสนเทศภูมิศาสตร์เช่นการวาดภาพลุ่มน้ำและการทำนายสภาพอากาศ

  6. Google Pregel

    Pregel เป็นแพลตฟอร์มที่ปรับขนาดได้และทนต่อความผิดพลาดของ Google ด้วย API ที่ยืดหยุ่นเพียงพอในการแสดงกราฟตามอำเภอใจอัลกอริทึม

Spark GraphX ​​คืออะไร?

GraphX คือ Spark API สำหรับกราฟและการคำนวณแบบกราฟขนาน ประกอบด้วยชุดอัลกอริทึมกราฟและเครื่องมือสร้างที่เพิ่มมากขึ้นเพื่อลดความซับซ้อนของงานวิเคราะห์กราฟ


GraphX ​​ขยาย Spark RDD ด้วยกราฟคุณสมบัติการกระจายที่ยืดหยุ่น
กราฟคุณสมบัติเป็นกราฟหลายทิศทางซึ่งสามารถมีหลายขอบขนานกันได้ ทุกขอบและจุดยอดมีคุณสมบัติที่กำหนดโดยผู้ใช้ที่เกี่ยวข้อง ขอบขนานอนุญาตให้มีหลาย ๆความสัมพันธ์ระหว่างจุดยอดเดียวกัน

คุณสมบัติ Spark GraphX

ต่อไปนี้เป็นคุณสมบัติของ Spark GraphX:

  1. ความยืดหยุ่น :
    Spark GraphX ​​ทำงานได้กับทั้งกราฟและการคำนวณ GraphX ​​รวม ETL (Extract, Transform & Load) การวิเคราะห์เชิงสำรวจและการคำนวณกราฟซ้ำภายในระบบเดียว เราสามารถดูข้อมูลเดียวกันกับทั้งกราฟและคอลเลกชันแปลงและเข้าร่วมกราฟกับ RDD ได้อย่างมีประสิทธิภาพและเขียนอัลกอริทึมกราฟซ้ำที่กำหนดเองโดยใช้ Pregel API
  2. ความเร็ว :
    Spark GraphX ​​ให้ประสิทธิภาพเทียบเท่ากับระบบประมวลผลกราฟเฉพาะที่เร็วที่สุด เทียบได้กับระบบกราฟที่เร็วที่สุดในขณะที่ยังคงความยืดหยุ่นความทนทานต่อข้อผิดพลาดและความสะดวกในการใช้งานของ Spark
  3. ห้องสมุดอัลกอริทึมที่กำลังเติบโต :
    เราสามารถเลือกจากไลบรารีอัลกอริทึมกราฟที่กำลังเติบโตซึ่ง Spark GraphX ​​มีให้ อัลกอริทึมยอดนิยมบางส่วน ได้แก่ อันดับของหน้าส่วนประกอบที่เชื่อมต่อการเผยแพร่ฉลาก SVD ++ ส่วนประกอบที่เชื่อมต่ออย่างแน่นหนาและนับสามเหลี่ยม

การทำความเข้าใจ GraphX ​​ด้วยตัวอย่าง

ตอนนี้เราจะเข้าใจแนวคิดของ Spark GraphX ​​โดยใช้ตัวอย่าง ให้เราพิจารณากราฟง่ายๆดังแสดงในภาพด้านล่าง

รูป: Spark GraphX ​​Tutorial - ตัวอย่างกราฟ

เมื่อดูกราฟเราสามารถดึงข้อมูลเกี่ยวกับผู้คน (จุดยอด) และความสัมพันธ์ระหว่างพวกเขา (ขอบ) กราฟที่นี่แสดงถึงผู้ใช้ Twitter และผู้ที่ติดตามบน Twitter สำหรับเช่น Bob ติดตาม Davide และ Alice ทาง 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: Graph [(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

สำหรับ (triplet<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

ผลลัพธ์สำหรับโค้ดด้านบนมีดังต่อไปนี้:

แปลงไบนารีเป็น int java
บ๊อบชอบอลิซ บ๊อบชอบเดวิด ชาร์ลีชอบบ๊อบ ชาร์ลีชอบฟราน เดวิดชอบอลิซ เอ็ดชอบบ๊อบ เอ็ดชอบชาร์ลี เอ็ดชอบฟราน

ตอนนี้เราเข้าใจพื้นฐานของ GraphX ​​แล้วให้เราดำน้ำลึกขึ้นอีกนิดและทำการคำนวณขั้นสูงในสิ่งเดียวกัน

จำนวนผู้ติดตาม : ผู้ใช้ทุกคนในกราฟของเรามีจำนวนผู้ติดตามที่แตกต่างกัน ให้เราดูผู้ติดตามทั้งหมดสำหรับผู้ใช้ทุกคน

// การกำหนดคลาสเพื่อให้ชัดเจนยิ่งขึ้นโมเดลคุณสมบัติของผู้ใช้คลาสเคสผู้ใช้ (name: String, age: Int, inDeg: Int, outDeg: Int) // การสร้างกราฟผู้ใช้ val initialUserGraph: Graph [User, Int] = graph 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) => User (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คน.

ผู้ติดตามเก่าที่สุด : เรายังสามารถจัดเรียงผู้ติดตามตามลักษณะของพวกเขา ให้เราค้นหาผู้ติดตามที่เก่าแก่ที่สุดของผู้ใช้แต่ละคนตามอายุ

// การค้นหาผู้ติดตามที่เก่าแก่ที่สุดสำหรับผู้ใช้แต่ละคนที่เก่าแก่ที่สุดผู้ติดตาม: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// สำหรับแต่ละขอบส่งข้อความไปยังจุดยอดปลายทางพร้อมแอตทริบิวต์ของต้นทาง vertex edge => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // ในการรวมข้อความรับข้อความสำหรับผู้ติดตามรุ่นเก่า (a, b) => if (a. _2> b._2) อื่น b)

ผลลัพธ์สำหรับโค้ดด้านบนมีดังต่อไปนี้:

เดวิดเป็นผู้ติดตามที่เก่าแก่ที่สุดของอลิซ. ชาร์ลีเป็นผู้ติดตามที่เก่าแก่ที่สุดของบ๊อบ. เอ็ดเป็นผู้ติดตามที่เก่าแก่ที่สุดของชาร์ลี. บ๊อบเป็นผู้ติดตามที่เก่าแก่ที่สุดของเดวิด. เอ็ดไม่มีผู้ติดตามใด ๆ. ชาร์ลีเป็นผู้ติดตามที่เก่าแก่ที่สุดของฟราน. 

ใช้กรณี: การวิเคราะห์ข้อมูลเที่ยวบินโดยใช้ Spark GraphX

เมื่อเราเข้าใจแนวคิดหลักของ Spark GraphX ​​แล้วให้เราแก้ปัญหาในชีวิตจริงโดยใช้ GraphX สิ่งนี้จะช่วยให้เรามีความมั่นใจในการทำงานในโครงการต่างๆของ Spark ในอนาคต

อ่านและเขียนไฟล์ excel ใน java

คำชี้แจงปัญหา : ในการวิเคราะห์ข้อมูลการบินแบบเรียลไทม์โดยใช้ Spark GraphX ​​ให้แสดงผลการคำนวณแบบเรียลไทม์และแสดงผลลัพธ์โดยใช้ Google Data Studio

Use Case - การคำนวณที่ต้องทำ :

  1. คำนวณจำนวนเส้นทางการบินทั้งหมด
  2. คำนวณและจัดเรียงเส้นทางการบินที่ยาวที่สุด
  3. แสดงสนามบินที่มีจุดยอดระดับสูงสุด
  4. รายชื่อสนามบินที่สำคัญที่สุดตาม PageRank
  5. แสดงรายการเส้นทางที่มีต้นทุนการบินต่ำที่สุด

เราจะใช้ Spark GraphX ​​สำหรับการคำนวณข้างต้นและแสดงภาพผลลัพธ์โดยใช้ Google Data Studio

ใช้กรณี - ชุดข้อมูล :

รูป: ใช้กรณี - ชุดข้อมูลเที่ยวบินของสหรัฐอเมริกา

Use Case - Flow Diagram :

ภาพประกอบต่อไปนี้อธิบายขั้นตอนทั้งหมดที่เกี่ยวข้องกับการวิเคราะห์ข้อมูลเที่ยวบินของเราอย่างชัดเจน

รูป: Use Case - Flow diagram ของการวิเคราะห์ข้อมูลเที่ยวบินโดยใช้ Spark GraphX

Use Case - Spark Implementation :

ก้าวไปข้างหน้าตอนนี้ให้เราใช้โครงการของเราโดยใช้ Eclipse IDE สำหรับ Spark

ค้นหารหัสหลอกด้านล่าง:

// การนำเข้าคลาสที่จำเป็น import org.apache.spark._ ... import java.io.File object airport {def main (args: Array [String]) {// การสร้าง Case Class Flight case 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 = SparkConf ใหม่ (). setAppName ('สนามบิน'). setMaster ('local [2]') val sc = ใหม่ SparkContext (conf) // โหลดข้อมูลลงใน RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // แยกวิเคราะห์ RDD ของสาย CSV เป็น RDD ของคลาสการบิน flightRDD = แผนที่ ParseFlight เป็น Text RDD // สร้างสนามบิน RDD ด้วย ID และ Name val สนามบิน = Map Flight OriginID และ Origin airports.take (1) // การกำหนดจุดยอดเริ่มต้นที่เรียกว่าไม่มีที่ไหนเลยและการแมป Airport ID สำหรับ printlns val nowhere = 'ไม่มีที่ไหนเลย' val airportMap = ใช้ฟังก์ชันแผนที่ .collect.toList.toMap // สร้างเส้นทาง RDD ด้วยรหัสต้นทางรหัสปลายทางและเส้นทาง val ระยะทาง = flightRDD ใช้ Map Function .distinct route.take (2) // สร้างขอบ RDD ด้วย sourceID, destinationID และ distance val edge = route.map {(Map OriginID and DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // กำหนดกราฟและแสดงจุดยอดและขอบกราฟ val = กราฟ (สนามบินขอบและไม่มีที่ไหนเลย) graph.vertices.take (2) graph.edges.take (2) // แบบสอบถาม 1 - ค้นหา จำนวนสนามบินทั้งหมด val numairports = Vertices Number // Query 2 - คำนวณจำนวนเส้นทางทั้งหมด? val numroutes = Number Of Edges // Query 3 - คำนวณเส้นทางเหล่านั้นด้วยระยะทางมากกว่า 1,000 ไมล์ graph.edges.filter {Get the edge distance) => distance> 1000} .take (3) // ในทำนองเดียวกันเขียนโค้ด Scala สำหรับ ด้านล่างข้อความค้นหา // แบบสอบถาม 4 - จัดเรียงและพิมพ์เส้นทางที่ยาวที่สุด // แบบสอบถาม 5 - แสดงจุดยอดในระดับสูงสุดสำหรับเที่ยวบินขาเข้าและขาออกของสนามบิน // แบบสอบถาม 6 - รับชื่อสนามบินด้วยรหัส 10397 และ 12478 // แบบสอบถาม 7 - ค้นหา สนามบินที่มีเที่ยวบินขาเข้าสูงสุด // Query 8 - ค้นหาสนามบินที่มีเที่ยวบินขาออกสูงสุด // Query 9 - ค้นหาสนามบินที่สำคัญที่สุดตาม PageRank // Query 10 - จัดเรียงสนามบินตามอันดับ // Query 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

เราขอแนะนำสิ่งต่อไปนี้ การฝึกอบรม Apache Spark | วิดีโอการวิเคราะห์ข้อมูลเที่ยวบิน จาก Edureka จะเริ่มต้นด้วย:

การฝึกอบรม Apache Spark | การวิเคราะห์ข้อมูลเที่ยวบิน Spark GraphX ​​| Edureka

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับโดยเร็วที่สุด

หากคุณต้องการเรียนรู้ Spark และสร้างอาชีพในโดเมนของ Spark และสร้างความเชี่ยวชาญในการประมวลผลข้อมูลขนาดใหญ่โดยใช้ RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​และ Scala พร้อมกรณีการใช้งานในชีวิตจริงลองดูแบบโต้ตอบสดของเรา - ออนไลน์ ที่นี่ ที่มาพร้อมกับการสนับสนุน 24 * 7 เพื่อแนะนำคุณตลอดระยะเวลาการเรียนรู้ของคุณ