GraphX là API của Apache Spark dành cho đồ thị và tính toán song song đồ thị. GraphX thống nhất quy trình ETL (Extract, Transform & Load), phân tích khám phá và tính toán đồ thị lặp lại trong một hệ thống duy nhất. Việc sử dụng biểu đồ có thể được nhìn thấy trong bạn bè trên Facebook, kết nối của LinkedIn, bộ định tuyến trên internet, mối quan hệ giữa các thiên hà và các ngôi sao trong vật lý thiên văn và Bản đồ của Google. Mặc dù khái niệm tính toán đồ thị có vẻ rất đơn giản, các ứng dụng của đồ thị thực sự là vô hạn với các trường hợp sử dụng trong phát hiện thảm họa, ngân hàng, thị trường chứng khoán, ngân hàng và các hệ thống địa lý.Học cách sử dụng API này là một phần quan trọng của .Thông qua blog này, chúng ta sẽ tìm hiểu các khái niệm về Spark GraphX, các tính năng và thành phần của nó thông qua các ví dụ và xem qua trường hợp sử dụng hoàn chỉnh của Phân tích dữ liệu chuyến bay bằng GraphX.
Chúng tôi sẽ đề cập đến các chủ đề sau trong blog Spark GraphX này:
- Đồ thị là gì?
- Các trường hợp sử dụng của tính toán đồ thị
- Spark GraphX là gì?
- Tính năng Spark GraphX
- Hiểu GraphX với các ví dụ
- Trường hợp sử dụng - Phân tích dữ liệu chuyến bay bằng GraphX
Đồ thị là gì?
Đồ thị là một cấu trúc toán học bao gồm một tập hợp các đối tượng trong đó một số cặp đối tượng có liên quan với nhau theo một nghĩa nào đó. Các quan hệ này có thể được biểu diễn bằng cách sử dụng các cạnh và đỉnh tạo thành một đồ thị. Các đỉnh thể hiện các đối tượng và các cạnh thể hiện các mối quan hệ khác nhau giữa các đối tượng đó.
Nhân vật: Hướng dẫn Spark GraphX - Các đỉnh, cạnh và bộ ba trong đồ thị
Trong khoa học máy tính, đồ thị là một kiểu dữ liệu trừu tượng dùng để triển khai các khái niệm đồ thị vô hướng và đồ thị có hướng từ toán học, cụ thể là lĩnh vực lý thuyết đồ thị. Cấu trúc dữ liệu biểu đồ cũng có thể liên kết với mỗi cạnh một số giá trị cạnh , chẳng hạn như nhãn tượng trưng hoặc thuộc tính số (chi phí, dung lượng, độ dài,Vân vân.).
Các trường hợp sử dụng của tính toán đồ thị
Các trường hợp sử dụng sau đây cung cấp một quan điểm về tính toán đồ thị và phạm vi xa hơn để thực hiện các giải pháp khác bằng cách sử dụng đồ thị.
- Hệ thống phát hiện thiên tai
Đồ thị có thể được sử dụng để phát hiện các thảm họa như bão, động đất, sóng thần, cháy rừng và núi lửa để đưa ra các cảnh báo để cảnh báo cho mọi người.
- Xếp hạng trang Xếp hạng Trang có thể được sử dụng để tìm những người có ảnh hưởng trong bất kỳ mạng nào, chẳng hạn như mạng trích dẫn báo cáo hoặc mạng truyền thông xã hội.
- Phát hiện gian lận tài chính
Phân tích đồ thị có thể được sử dụng để theo dõi giao dịch tài chính và phát hiện những người liên quan đến gian lận tài chính và rửa tiền.
- Phân tích kinh doanh
Đồ thị, khi được sử dụng cùng với Học máy, giúp hiểu được xu hướng mua hàng của khách hàng. Ví dụ. Uber, McDonald’s, v.v.
- Hệ thống thông tin địa lý
Đồ thị được sử dụng nhiều để phát triển các chức năng trên hệ thống thông tin địa lý như phân định lưu vực và dự báo thời tiết.
- Google Pregel
Pregel là nền tảng có khả năng mở rộng và chịu được lỗi của Google với một API đủ linh hoạt để thể hiện biểu đồ tùy ýcác thuật toán.
Spark GraphX là gì?
GraphX là API Spark dành cho đồ thị và tính toán song song đồ thị. Nó bao gồm một bộ sưu tập ngày càng tăng các thuật toán đồ thị và trình tạo để đơn giản hóa các nhiệm vụ phân tích đồ thị.
GraphX mở rộng Spark RDD với Đồ thị thuộc tính phân tán có khả năng phục hồi.Biểu đồ thuộc tính là một đồ thị nhiều hướng có thể có nhiều cạnh song song. Mọi cạnh và đỉnh đều có các thuộc tính do người dùng xác định gắn liền với nó. Các cạnh song song cho phép nhiềucác mối quan hệ giữa các đỉnh giống nhau.
Tính năng Spark GraphX
Sau đây là các tính năng của Spark GraphX:
- Uyển chuyển :
Spark GraphX hoạt động với cả đồ thị và tính toán. GraphX hợp nhất ETL (Extract, Transform & Load), phân tích khám phá và tính toán đồ thị lặp lại trong một hệ thống duy nhất. Chúng tôi có thể xem cùng một dữ liệu dưới dạng cả biểu đồ và bộ sưu tập, biến đổi và nối đồ thị với RDD một cách hiệu quả và viết các thuật toán biểu đồ lặp lại tùy chỉnh bằng cách sử dụng API Pregel. - Tốc độ :
Spark GraphX cung cấp hiệu suất tương đương với các hệ thống xử lý đồ thị chuyên dụng nhanh nhất. Nó có thể so sánh với các hệ thống đồ thị nhanh nhất trong khi vẫn giữ được tính linh hoạt, khả năng chịu lỗi và dễ sử dụng của Spark. - Thư viện thuật toán đang phát triển :
Chúng ta có thể chọn từ một thư viện thuật toán đồ thị ngày càng tăng mà Spark GraphX cung cấp. Một số thuật toán phổ biến là xếp hạng trang, các thành phần được kết nối, truyền nhãn, SVD ++, các thành phần được kết nối mạnh mẽ vàsố lượng tam giác.
Hiểu GraphX với các ví dụ
Bây giờ chúng ta sẽ hiểu các khái niệm về Spark GraphX bằng cách sử dụng một ví dụ. Chúng ta hãy xem xét một đồ thị đơn giản như trong hình dưới đây.
Nhân vật: Hướng dẫn sử dụng Spark GraphX - Ví dụ về đồ thị
Nhìn vào biểu đồ, chúng ta có thể trích xuất thông tin về người (đỉnh) và quan hệ giữa chúng (cạnh). Biểu đồ ở đây đại diện cho người dùng Twitter và những người họ theo dõi trên Twitter. Ví dụ Bob theo dõi Davide và Alice trên Twitter.
Hãy để chúng tôi triển khai tương tự bằng Apache Spark. Đầu tiên, chúng ta sẽ nhập các lớp cần thiết cho GraphX.
// Nhập các lớp cần thiết 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
Hiển thị các Dọc :Hơn nữa, bây giờ chúng tôi sẽ hiển thị tất cả tên và tuổi của người dùng (các đỉnh).
val vertexRDD: RDD [(Long, (String, Int))] = sc.parallelize (vertexArray) val edgeRDD: RDD [Edge [Int]] = sc.parallelize (edgeArray) val graph: Graph [(String, Int), Int] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => age> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ name là $ age')}
Đầu ra cho đoạn mã trên như sau:
DavidLà42 FranLànăm mươi EdLà55 CharlieLà65
Hiển thị các cạnh : Hãy để chúng tôi xem người nào thích ai trên Twitter.
cho (sinh ba<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') }
Đầu ra cho đoạn mã trên như sau:
sự khác biệt giữa html và xml là gì
BobthíchAlice BobthíchDavid CharliethíchBob CharliethíchFran DavidthíchAlice EdthíchBob EdthíchCharlie EdthíchFran
Bây giờ chúng ta đã hiểu cơ bản về GraphX, chúng ta hãy đi sâu hơn một chút và thực hiện một số tính toán nâng cao trên cùng một số.
Số người theo dõi : Mỗi người dùng trong biểu đồ của chúng tôi có số lượng người theo dõi khác nhau. Hãy để chúng tôi xem xét tất cả những người theo dõi cho mọi người dùng.
// Định nghĩa một lớp để mô hình hóa rõ ràng hơn lớp thuộc tính người dùng User (name: String, age: Int, inDeg: Int, outDeg: Int) // Tạo một người dùng Graph val initialUserGraph: Graph [User, Int] = graph. mapVertices {case (id, (name, age)) => User (name, age, 0, 0)} // Điền thông tin bằng cấp val userGraph = initialUserGraph.outerJoinVertices (initialUserGraph.inDegrees) {case (id, u, inDegOpt) => Người dùng (u.name, u.age, inDegOpt.getOrElse (0), u.outDeg)} .outerJoinVertices (initialUserGraph.outDegrees) {case (id, u, outDegOpt) => Người dùng (u.name, u.age, u.inDeg, outDegOpt.getOrElse (0))} for ((id, property)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') }
Đầu ra cho đoạn mã trên như sau:
Người dùng mộtđược gọi làAlicevà được thích bởi2Mọi người. Người dùng 2được gọi làBobvà được thích bởi2Mọi người. Người dùng 3được gọi làCharlievà được thích bởimộtMọi người. Người dùng 4được gọi làDavidvà được thích bởimộtMọi người. Người dùng 5được gọi làEdvà được thích bởi0Mọi người. Người dùng 6được gọi làFranvà được thích bởi2Mọi người.
Người theo dõi cũ nhất : Chúng tôi cũng có thể sắp xếp những người theo dõi theo đặc điểm của họ. Hãy để chúng tôi tìm những người theo dõi lâu đời nhất của từng người dùng theo độ tuổi.
// Tìm người theo dõi lâu đời nhất cho mỗi người dùng. Người theo dõi lâu đời nhất: VertexRDD [(String, Int)] = userGraph.mapReduceTriplets [(String, Int)] (// Với mỗi cạnh gửi thông báo đến đỉnh đích với thuộc tính của nguồn đỉnh cạnh => Iterator ((edge.dstId, (edge.srcAttr.name, edge.srcAttr.age))), // Để kết hợp các thông báo, hãy lấy thông báo cho người theo dõi cũ hơn (a, b) => if (a. _2> b._2) a khác b)
Đầu ra cho đoạn mã trên như sau:
Davidlà người theo dõi lâu đời nhất củaAlice. Charlielà người theo dõi lâu đời nhất củaBob. Edlà người theo dõi lâu đời nhất củaCharlie. Boblà người theo dõi lâu đời nhất củaDavid. Edkhông có bất kỳ người theo dõi. Charlielà người theo dõi lâu đời nhất củaFran.
Trường hợp sử dụng: Phân tích dữ liệu chuyến bay bằng Spark GraphX
Bây giờ chúng ta đã hiểu các khái niệm cốt lõi của Spark GraphX, chúng ta hãy giải quyết một vấn đề trong đời thực bằng GraphX. Điều này sẽ giúp chúng tôi tự tin để làm việc trong bất kỳ dự án nào của Spark trong tương lai.
điều kiện tiên quyết cho khóa học trí tuệ nhân tạo
Báo cáo vấn đề : Để phân tích dữ liệu Chuyến bay theo thời gian thực bằng Spark GraphX, hãy cung cấp kết quả tính toán gần thời gian thực và trực quan hóa kết quả bằng Google Data Studio.
Trường hợp sử dụng - Tính toán được thực hiện :
- Tính tổng số tuyến bay
- Tính toán và sắp xếp các tuyến đường bay dài nhất
- Hiển thị sân bay có đỉnh độ cao nhất
- Liệt kê các sân bay quan trọng nhất theo PageRank
- Liệt kê các tuyến bay có chi phí bay thấp nhất
Chúng tôi sẽ sử dụng Spark GraphX cho các tính toán trên và trực quan hóa kết quả bằng Google Data Studio.
Trường hợp sử dụng - Tập dữ liệu :
Nhân vật: Trường hợp sử dụng - Bộ dữ liệu chuyến bay Hoa Kỳ
Ca sử dụng - Sơ đồ luồng :
Hình minh họa sau giải thích rõ ràng tất cả các bước liên quan đến Phân tích dữ liệu chuyến bay của chúng tôi.
Nhân vật: Ca sử dụng - Sơ đồ luồng Phân tích dữ liệu chuyến bay bằng Spark GraphX
Trường hợp sử dụng - Triển khai Spark :
Tiếp tục, bây giờ chúng ta hãy triển khai dự án của mình bằng Eclipse IDE cho Spark.
Tìm Mã giả bên dưới:
// Nhập các lớp cần thiết import org.apache.spark._ ... import java.io.File object Airport {def main (args: Array [String]) {// Tạo Case Class Flight Case class Flight (dofM: String, dofW: String, ..., dist: Int) // Định nghĩa hàm Parse String để phân tích cú pháp đầu vào vào lớp Flight def parseFlight (str: String): Flight = {val line = str.split (',') Flight (line (0), line (1), ..., line (16) .toInt)} val conf = new SparkConf (). setAppName ('airport'). setMaster ('local [2]') val sc = new SparkContext (conf) // Tải dữ liệu vào RDD val textRDD = sc.textFile ('/ home / edureka / usecases / airport / airportdataset.csv') // Phân tích cú pháp RDD của các dòng CSV thành RDD của các hạng chuyến bay val FlightRDD = Ánh xạ ParseFlight to Text RDD // Tạo sân bay RDD với ID và Tên val Sân bay = Bản đồ Chuyến bay OriginID và Sân bay xuất phát.take (1) // Xác định một đỉnh mặc định được gọi là hư không và ánh xạ ID Sân bay cho printlns val where = 'nothing' val AirportMap = Sử dụng Hàm Bản đồ .collect.toList.toMap // Tạo các tuyến đường RDD với sourceID, destinationID và các tuyến đường val khoảng cách = các chuyến bayRDD. Sử dụng chức năng bản đồ .distinctions.take (2) // Tạo các cạnh RDD với sourceID, destinationID và khoảng cách val edge = route.map {(Map OriginID và DestinationID) => Edge (org_id.toLong, dest_id.toLong, khoảng cách)} edge.take (1) // Xác định đồ thị và hiển thị một số đỉnh và cạnh val graph = Graph (Airports, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Truy vấn 1 - Tìm tổng số sân bay. val numairports = Vertices Number // Truy vấn 2 - Tính tổng số đường bay? val numroutes = số cạnh // Query 3 - Tính toán những tuyến đường với khoảng cách hơn 1000 dặm graph.edges.filter {Lấy khoảng cách cạnh) => khoảng cách> 1000} .take (3) // Tương tự viết mã Scala cho truy vấn dưới đây // Truy vấn 4 - Sắp xếp và in các tuyến đường dài nhất // Truy vấn 5 - Hiển thị đỉnh cao nhất cho các chuyến bay đến và đi của các sân bay // Truy vấn 6 - Lấy tên sân bay với các ID 10397 và 12478 // Truy vấn 7 - Tìm sân bay có chuyến bay đến cao nhất // Truy vấn 8 - Tìm sân bay có chuyến bay đi cao nhất // Truy vấn 9 - Tìm sân bay quan trọng nhất theo PageRank // Truy vấn 10 - Sắp xếp các sân bay theo thứ hạng // Truy vấn 11 - Hiển thị nhiều nhất các sân bay quan trọng // Truy vấn 12 - Tìm các tuyến bay có chi phí chuyến bay thấp nhất // Truy vấn 13 - Tìm các sân bay và chi phí chuyến bay thấp nhất của họ // Truy vấn 14 - Hiển thị mã sân bay cùng với chi phí chuyến bay thấp nhất được sắp xếp
Ca sử dụng - Hình dung kết quả :
Chúng tôi sẽ sử dụng Google Data Studio để trực quan hóa phân tích của mình. Google Data Studio là một sản phẩm thuộc Google Analytics 360 Suite. Chúng tôi sẽ sử dụng dịch vụ Bản đồ địa lý để lập bản đồ các Sân bay trên các vị trí tương ứng của chúng trên bản đồ Hoa Kỳ và hiển thị số lượng chỉ số.
- Hiển thị tổng số chuyến bay trên mỗi Sân bay
- Hiển thị tổng số liệu của các tuyến Điểm đến từ mọi Sân bay
- Hiển thị tổng thời gian hoãn của tất cả các chuyến bay trên mỗi Sân bay
Bây giờ, điều này kết thúc blog Spark GraphX. Tôi hy vọng bạn thích đọc nó và tìm thấy nó nhiều thông tin. Hãy xem blog tiếp theo trong loạt Apache Spark của chúng tôi trên sẵn sàng cho thị trường trong Apache Spark.
Chúng tôi đề xuất những điều sau Đào tạo Apache Spark | Video Phân tích Dữ liệu Chuyến bay từ Edureka để bắt đầu với:
Đào tạo Apache Spark | Phân tích dữ liệu chuyến bay Spark GraphX | Edureka
Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến vấn đề này trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.
Nếu bạn muốn tìm hiểu Spark và xây dựng sự nghiệp trong miền Spark cũng như xây dựng chuyên môn để thực hiện Xử lý dữ liệu quy mô lớn bằng cách sử dụng RDD, Spark Streaming, SparkSQL, MLlib, GraphX và Scala với các ca sử dụng trong Đời thực, hãy xem tương tác, trực tiếp -Trực tuyến đây, đi kèm với hỗ trợ 24 * 7 để hướng dẫn bạn trong suốt thời gian học tập.