GraphX คือ API ของ Apache Spark สำหรับกราฟและการคำนวณแบบกราฟขนาน GraphX รวมกระบวนการ ETL (Extract, Transform & Load) การวิเคราะห์เชิงสำรวจและการคำนวณกราฟซ้ำภายในระบบเดียว การใช้กราฟสามารถเห็นได้ในเพื่อนของ Facebook, การเชื่อมต่อของ LinkedIn, เราเตอร์ของอินเทอร์เน็ต, ความสัมพันธ์ระหว่างกาแลคซีและดวงดาวในฟิสิกส์ดาราศาสตร์และแผนที่ของ Google แม้ว่าแนวคิดของการคำนวณกราฟจะดูเรียบง่าย แต่การประยุกต์ใช้กราฟนั้นไร้ขีด จำกัด อย่างแท้จริงสำหรับกรณีการใช้งานในการตรวจจับภัยพิบัติการธนาคารตลาดหุ้นการธนาคารและระบบทางภูมิศาสตร์เพียงเพื่อชื่อไม่กี่การเรียนรู้การใช้ API นี้เป็นส่วนสำคัญของไฟล์ .ในบล็อกนี้เราจะได้เรียนรู้แนวคิดของ Spark GraphX คุณลักษณะและส่วนประกอบผ่านตัวอย่างและดูกรณีการใช้งานทั้งหมดของ Flight Data Analytics โดยใช้ GraphX
เราจะกล่าวถึงหัวข้อต่อไปนี้ในบล็อก Spark GraphX:
- กราฟคืออะไร?
- ใช้กรณีของการคำนวณกราฟ
- Spark GraphX คืออะไร?
- คุณสมบัติ Spark GraphX
- การทำความเข้าใจ GraphX ด้วยตัวอย่าง
- Use Case - การวิเคราะห์ข้อมูลเที่ยวบินโดยใช้ GraphX
กราฟคืออะไร?
กราฟเป็นโครงสร้างทางคณิตศาสตร์ที่มีส่วนประกอบของชุดของวัตถุซึ่งบางคู่ของวัตถุมีความสัมพันธ์กันในบางแง่ ความสัมพันธ์เหล่านี้สามารถแสดงได้โดยใช้ขอบและจุดยอดสร้างกราฟ จุดยอดเป็นตัวแทนของวัตถุและขอบจะแสดงความสัมพันธ์ต่างๆระหว่างวัตถุเหล่านั้น
รูป: บทช่วยสอน Spark GraphX - จุดยอดขอบและสามเท่าในกราฟ
ในวิทยาการคอมพิวเตอร์กราฟเป็นประเภทข้อมูลนามธรรมที่มีขึ้นเพื่อใช้กราฟที่ไม่ได้กำหนดทิศทางและแนวคิดกราฟที่กำหนดทิศทางจากคณิตศาสตร์โดยเฉพาะในสาขาทฤษฎีกราฟ โครงสร้างข้อมูลกราฟอาจเชื่อมโยงกับขอบแต่ละด้านด้วย ค่าขอบ เช่นป้ายสัญลักษณ์หรือแอตทริบิวต์ตัวเลข (ต้นทุนความจุความยาวฯลฯ ).
ใช้กรณีของการคำนวณกราฟ
กรณีการใช้งานต่อไปนี้ให้มุมมองเกี่ยวกับการคำนวณกราฟและขอบเขตเพิ่มเติมในการนำโซลูชันอื่น ๆ ไปใช้โดยใช้กราฟ
- ระบบตรวจจับภัยพิบัติ
กราฟสามารถใช้เพื่อตรวจจับภัยพิบัติเช่นพายุเฮอริเคนแผ่นดินไหวสึนามิไฟป่าและภูเขาไฟเพื่อให้คำเตือนแจ้งเตือนประชาชน
- จัดอันดับหน้า Page Rank สามารถใช้ในการค้นหาผู้มีอิทธิพลในเครือข่ายต่างๆเช่นเครือข่ายกระดาษอ้างอิงหรือเครือข่ายโซเชียลมีเดีย
- การตรวจจับการฉ้อโกงทางการเงิน
การวิเคราะห์กราฟสามารถใช้เพื่อตรวจสอบธุรกรรมทางการเงินและตรวจจับผู้ที่เกี่ยวข้องกับการฉ้อโกงทางการเงินและการฟอกเงิน
- การวิเคราะห์ธุรกิจ
กราฟเมื่อใช้ร่วมกับ Machine Learning จะช่วยในการทำความเข้าใจแนวโน้มการซื้อของลูกค้า เช่น. Uber, McDonald’s ฯลฯ
- ระบบสารสนเทศภูมิศาสตร์
กราฟถูกนำมาใช้อย่างเข้มข้นเพื่อพัฒนาฟังก์ชันบนระบบสารสนเทศภูมิศาสตร์เช่นการวาดภาพลุ่มน้ำและการทำนายสภาพอากาศ
- Google Pregel
Pregel เป็นแพลตฟอร์มที่ปรับขนาดได้และทนต่อความผิดพลาดของ Google ด้วย API ที่ยืดหยุ่นเพียงพอในการแสดงกราฟตามอำเภอใจอัลกอริทึม
Spark GraphX คืออะไร?
GraphX คือ Spark API สำหรับกราฟและการคำนวณแบบกราฟขนาน ประกอบด้วยชุดอัลกอริทึมกราฟและเครื่องมือสร้างที่เพิ่มมากขึ้นเพื่อลดความซับซ้อนของงานวิเคราะห์กราฟ
GraphX ขยาย Spark RDD ด้วยกราฟคุณสมบัติการกระจายที่ยืดหยุ่นกราฟคุณสมบัติเป็นกราฟหลายทิศทางซึ่งสามารถมีหลายขอบขนานกันได้ ทุกขอบและจุดยอดมีคุณสมบัติที่กำหนดโดยผู้ใช้ที่เกี่ยวข้อง ขอบขนานอนุญาตให้มีหลาย ๆความสัมพันธ์ระหว่างจุดยอดเดียวกัน
คุณสมบัติ Spark GraphX
ต่อไปนี้เป็นคุณสมบัติของ Spark GraphX:
- ความยืดหยุ่น :
Spark GraphX ทำงานได้กับทั้งกราฟและการคำนวณ GraphX รวม ETL (Extract, Transform & Load) การวิเคราะห์เชิงสำรวจและการคำนวณกราฟซ้ำภายในระบบเดียว เราสามารถดูข้อมูลเดียวกันกับทั้งกราฟและคอลเลกชันแปลงและเข้าร่วมกราฟกับ RDD ได้อย่างมีประสิทธิภาพและเขียนอัลกอริทึมกราฟซ้ำที่กำหนดเองโดยใช้ Pregel API - ความเร็ว :
Spark GraphX ให้ประสิทธิภาพเทียบเท่ากับระบบประมวลผลกราฟเฉพาะที่เร็วที่สุด เทียบได้กับระบบกราฟที่เร็วที่สุดในขณะที่ยังคงความยืดหยุ่นความทนทานต่อข้อผิดพลาดและความสะดวกในการใช้งานของ Spark - ห้องสมุดอัลกอริทึมที่กำลังเติบโต :
เราสามารถเลือกจากไลบรารีอัลกอริทึมกราฟที่กำลังเติบโตซึ่ง 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 - การคำนวณที่ต้องทำ :
- คำนวณจำนวนเส้นทางการบินทั้งหมด
- คำนวณและจัดเรียงเส้นทางการบินที่ยาวที่สุด
- แสดงสนามบินที่มีจุดยอดระดับสูงสุด
- รายชื่อสนามบินที่สำคัญที่สุดตาม PageRank
- แสดงรายการเส้นทางที่มีต้นทุนการบินต่ำที่สุด
เราจะใช้ 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 เพื่อทำแผนที่สนามบินตามสถานที่ต่างๆบนแผนที่สหรัฐอเมริกาและแสดงปริมาณเมตริก
- แสดงจำนวนเที่ยวบินทั้งหมดต่อสนามบิน
- แสดงผลรวมเมตริกของเส้นทางปลายทางจากทุกสนามบิน
- แสดงความล่าช้าทั้งหมดของเที่ยวบินทั้งหมดต่อสนามบิน
ตอนนี้สรุปบล็อก 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 เพื่อแนะนำคุณตลอดระยะเวลาการเรียนรู้ของคุณ