Spark GraphX ​​자습서 – Apache Spark의 그래프 분석



이 GraphX ​​튜토리얼 블로그에서는 비행 데이터 분석 프로젝트를 포함한 Apache Spark GraphX의 기능 및 구성 요소를 소개합니다.

GraphX 그래프 및 그래프 병렬 계산을위한 Apache Spark의 API입니다. GraphX는 ETL (추출, 변환 및로드) 프로세스, 탐색 적 분석 및 반복적 인 그래프 계산을 단일 시스템 내에서 통합합니다. 그래프 사용은 Facebook의 친구, LinkedIn의 연결, 인터넷의 라우터, 천체 물리학 및 Google지도에서 은하와 별 간의 관계에서 볼 수 있습니다. 그래프 계산의 개념은 매우 간단 해 보이지만 몇 가지 예를 들어 재해 감지, 은행, 주식 시장, 은행 및 지리 시스템의 사용 사례를 통해 그래프의 응용 프로그램은 문자 그대로 무한합니다.이 API의 사용법을 배우는 것은 .이 블로그를 통해 Spark GraphX의 개념, 기능 및 구성 요소를 예제를 통해 배우고 GraphX를 사용한 Flight Data Analytics의 전체 사용 사례를 살펴 봅니다.

파이썬의 주요 오류는 무엇입니까

이 Spark GraphX ​​블로그에서 다음 주제를 다룰 것입니다.





  1. 그래프 란?
  2. 그래프 계산의 사용 사례
  3. Spark GraphX ​​란 무엇입니까?
  4. Spark GraphX ​​기능
  5. 예제로 GraphX ​​이해하기
  6. 사용 사례 – GraphX를 사용한 비행 데이터 분석

그래프 란?

그래프는 일부 개체 쌍이 어떤 의미에서 관련되어있는 개체 집합에 해당하는 수학적 구조입니다. 이러한 관계는 그래프를 형성하는 모서리와 꼭지점을 사용하여 나타낼 수 있습니다. 정점은 객체를 나타내고 가장자리는 이러한 객체 간의 다양한 관계를 보여줍니다.

그래프 개념-Spark GraphX ​​Tutorial-Edureka그림: Spark GraphX ​​자습서 – 그래프의 정점, 가장자리 및 삼중 선



컴퓨터 과학에서 그래프는 수학, 특히 그래프 이론 분야에서 방향성이없는 그래프와 방향성 그래프 개념을 구현하기위한 추상 데이터 유형입니다. 그래프 데이터 구조는 또한 각 에지에 연결할 수 있습니다. 가장자리 값 , 기호 레이블 또는 숫자 속성 (비용, 용량, 길이,기타.).

그래프 계산의 사용 사례

다음 사용 사례는 그래프 계산에 대한 관점과 그래프를 사용하여 다른 솔루션을 구현할 수있는 추가 범위를 제공합니다.

  1. 재해 감지 시스템

    그래프를 사용하여 허리케인, 지진, 쓰나미, 산불 및 화산과 같은 재해를 감지하여 사람들에게 경고를 제공 할 수 있습니다.



  2. 페이지 랭크 페이지 순위는 논문 인용 네트워크 또는 소셜 미디어 네트워크와 같은 모든 네트워크에서 인플 루 언서를 찾는 데 사용할 수 있습니다.
  3. 금융 사기 감지

    그래프 분석은 금융 거래를 모니터링하고 금융 사기 및 자금 세탁에 연루된 사람들을 감지하는 데 사용할 수 있습니다.

  4. 비즈니스 분석

    기계 학습과 함께 사용할 경우 그래프는 고객 구매 추세를 이해하는 데 도움이됩니다. 예 : Uber, McDonald ’s 등

  5. 지리 정보 시스템

    그래프는 유역 묘사 및 날씨 예측과 같은 지리 정보 시스템의 기능을 개발하는 데 집중적으로 사용됩니다.

  6. Google Pregel

    Pregel은 임의의 그래프를 표현할 수있을만큼 충분히 유연한 API를 갖춘 Google의 확장 가능하고 내결함성이있는 플랫폼입니다.알고리즘.

Spark GraphX ​​란 무엇입니까?

GraphX 그래프 및 그래프 병렬 계산을위한 Spark API입니다. 여기에는 그래프 분석 작업을 단순화하기위한 그래프 알고리즘 및 빌더 모음이 포함됩니다.


GraphX는 탄력적 인 분산 속성 그래프로 Spark RDD를 확장합니다.
속성 그래프는 여러 모서리를 병렬로 가질 수있는 유 방향 다중 그래프입니다. 모든 모서리와 정점에는 이와 관련된 사용자 정의 속성이 있습니다. 평행 모서리는 여러동일한 정점 간의 관계.

Spark GraphX ​​기능

다음은 Spark GraphX의 기능입니다.

  1. 적응성 :
    Spark GraphX는 그래프와 계산 모두에서 작동합니다. GraphX는 ETL (추출, 변환 및로드), 탐색 적 분석 및 반복적 인 그래프 계산을 단일 시스템 내에서 통합합니다. 동일한 데이터를 그래프 및 컬렉션으로보고, 그래프를 RDD로 효율적으로 변환 및 결합하고 Pregel API를 사용하여 사용자 지정 반복 그래프 알고리즘을 작성할 수 있습니다.
  2. 속도 :
    Spark GraphX는 가장 빠른 특수 그래프 처리 시스템과 비슷한 성능을 제공합니다. Spark의 유연성, 내결함성 및 사용 용이성을 유지하면서 가장 빠른 그래프 시스템과 비슷합니다.
  3. 성장하는 알고리즘 라이브러리 :
    Spark GraphX가 제공해야하는 증가하는 그래프 알고리즘 라이브러리에서 선택할 수 있습니다. 인기있는 알고리즘 중 일부는 페이지 순위, 연결된 구성 요소, 레이블 전파, SVD ++, 강력하게 연결된 구성 요소 및삼각형 수.

예제로 GraphX ​​이해하기

이제 예제를 사용하여 Spark GraphX의 개념을 이해합니다. 아래 이미지와 같이 간단한 그래프를 고려해 보겠습니다.

그림: Spark GraphX ​​자습서 – 그래프 예제

그래프를 보면 사람 (정점)과 그들 사이의 관계 (가장자리)에 대한 정보를 추출 할 수 있습니다. 여기 그래프는 Twitter 사용자와 이들이 Twitter에서 팔로우하는 사람을 나타냅니다. 예 : Bob은 Twitter에서 Davide와 Alice를 팔로우합니다.

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] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => age> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ name은 $ age')}

위 코드의 출력은 다음과 같습니다.

데이비드이다42 Fran이다오십 Ed이다55 백인이다65

가장자리 표시 : 트위터에서 어떤 사람이 누구를 좋아하는지 살펴 보겠습니다.

(트리플렛<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

위 코드의 출력은 다음과 같습니다.

단발좋아요앨리스 단발좋아요데이비드 백인좋아요단발 백인좋아요Fran 데이비드좋아요앨리스 Ed좋아요단발 Ed좋아요백인 Ed좋아요Fran

이제 GraphX의 기본 사항을 이해 했으므로 좀 더 자세히 알아보고 동일한 고급 계산을 수행해 보겠습니다.

팔로워 수 : 그래프의 모든 사용자는 팔로어 수가 다릅니다. 모든 사용자의 모든 팔로워를 살펴 보겠습니다.

// 사용자 속성을보다 명확하게 모델링하기위한 클래스 정의 class User (name : String, age : Int, inDeg : Int, outDeg : Int) // 사용자 생성 Graph 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) => User (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))} for ((id, property)<- userGraph.vertices.collect) { println(s'User $id is called ${property.name} and is liked by ${property.inDeg} people.') } 

위 코드의 출력은 다음과 같습니다.

사용자 하나불린다앨리스그리고 좋아하는 사람2사람들. 사용자 2불린다단발그리고 좋아하는 사람2사람들. 사용자 불린다백인그리고 좋아하는 사람하나사람들. 사용자 4불린다데이비드그리고 좋아하는 사람하나사람들. 사용자 5불린다Ed그리고 좋아하는 사람0사람들. 사용자 6불린다Fran그리고 좋아하는 사람2사람들.

가장 오래된 팔로워 : 팔로워를 특성별로 분류 할 수도 있습니다. 연령별로 각 사용자의 가장 오래된 팔로어를 찾습니다.

// 각 사용자에 대해 가장 오래된 팔로워 찾기 val oldestFollower : 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) a else b)

위 코드의 출력은 다음과 같습니다.

데이비드의 가장 오래된 추종자입니다앨리스. 백인의 가장 오래된 추종자입니다단발. Ed의 가장 오래된 추종자입니다백인. 단발의 가장 오래된 추종자입니다데이비드. Ed팔로워가 없습니다. 백인의 가장 오래된 추종자입니다Fran. 

사용 사례 : Spark GraphX를 사용한 비행 데이터 분석

이제 Spark GraphX의 핵심 개념을 이해 했으므로 GraphX를 사용하여 실제 문제를 해결하겠습니다. 이를 통해 향후 Spark 프로젝트에서 작업 할 수있는 자신감을 얻을 수 있습니다.

문제 설명 : Spark GraphX를 사용하여 Real-Time Flight 데이터를 분석하려면 거의 실시간 계산 결과를 제공하고 Google 데이터 스튜디오를 사용하여 결과를 시각화합니다.

사용 사례 – 수행 할 계산 :

  1. 총 비행 경로 수 계산
  2. 가장 긴 비행 경로 계산 및 정렬
  3. 가장 높은 각도의 정점이있는 공항 표시
  4. PageRank에 따라 가장 중요한 공항 목록
  5. 비행 비용이 가장 낮은 노선 목록

위의 계산에 Spark GraphX를 사용하고 Google 데이터 스튜디오를 사용하여 결과를 시각화합니다.

사용 사례 – 데이터 세트 :

그림: 사용 사례 – 미국 항공편 데이터 세트

사용 사례 – 흐름도 :

다음 그림은 비행 데이터 분석과 관련된 모든 단계를 명확하게 설명합니다.

그림: 사용 사례 – Spark GraphX를 사용한 비행 데이터 분석의 흐름도

사용 사례 – Spark 구현 :

이제 Spark 용 Eclipse IDE를 사용하여 프로젝트를 구현해 보겠습니다.

아래에서 의사 코드를 찾으십시오.

// 필요한 클래스 가져 오기 import org.apache.spark._ ... import java.io.File object airport {def main (args : Array [String]) {// 케이스 클래스 생성 Flight case class Flight (dofM : String, dofW : String, ..., dist : Int) // Flight 클래스로 입력을 구문 분석하기위한 Parse String 함수 정의 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) // 데이터를 RDD에로드 val textRDD = sc.textFile ( '/ home / edureka / usecases / airport / airportdataset.csv') // CSV 라인의 RDD를 비행 클래스 val의 RDD로 구문 분석 flightsRDD = ParseFlight를 Text RDD에 매핑 // ID와 이름을 가진 공항 RDD 생성 val airports = Map Flight OriginID 및 Origin airports.take (1) // nowhere라는 기본 정점 정의 및 printlns에 대한 공항 ID 매핑 val nowhere = 'nowhere' val airportMap =지도 기능 사용 .collect.toList.toMap // 경로 생성 RDD sourceID, destinationID 및 거리 val 경로 포함 = flightsRDD. 지도 기능 사용 .distinct routes.take (2) // sourceID, destinationID 및 거리를 사용하여 가장자리 RDD 만들기 val edge = routes.map {(Map OriginID and DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // 그래프를 정의하고 정점과 간선을 표시 val graph = Graph (Airports, Edges and Nowhere) graph.vertices.take (2) graph.edges.take (2) // Query 1-Find 총 공항 수 val numairports = Vertices Number // Query 2-총 경로 수를 계산 하시겠습니까? val numroutes = 가장자리 개수 // Query 3-거리가 1000 마일 이상인 경로 계산 graph.edges.filter {가장자리 거리 가져 오기) => 거리> 1000} .take (3) // 아래 쿼리 // 쿼리 4-가장 긴 경로 정렬 및 인쇄 // 쿼리 5-공항의 들어오고 나가는 항공편에 대한 가장 높은 각도의 정점 표시 // 쿼리 6-ID 10397 및 12478로 공항 이름 가져 오기 // 쿼리 7-찾기 가장 많이 들어오는 항공편이있는 공항 // Query 8-가장 많이 나가는 항공편이있는 공항 찾기 // Query 9-PageRank에 따라 가장 중요한 공항 찾기 // Query 10-순위별로 공항 정렬 // Query 11-가장 많이 표시 중요한 공항 // Query 12-가장 저렴한 비행 비용이있는 경로 찾기 // Query 13-가장 저렴한 비행 비용을 찾는 // Query 14-정렬 된 최저 비행 비용과 함께 공항 코드 표시

사용 사례 – 결과 시각화 :

분석을 시각화하기 위해 Google 데이터 스튜디오를 사용할 것입니다. Google 데이터 스튜디오는 Google 애널리틱스 360 도구 모음의 제품입니다. 우리는 지리적지도 서비스를 사용하여 미국지도의 각 위치에 공항을 매핑하고 메트릭 수량을 표시합니다.

  1. 공항 당 총 항공편 수 표시
  2. 모든 공항의 목적지 경로에 대한 메트릭 합계 표시
  3. 공항 별 모든 항공편의 총 지연 표시

이제 Spark GraphX ​​블로그를 마칩니다. 나는 당신이 그것을 읽고 유익한 것을 발견하기를 바랍니다. Apache Spark 시리즈의 다음 블로그를 확인하십시오. Apache Spark에서 시장에 대비할 수 있습니다.

다음을 권장합니다. Apache Spark 교육 | 비행 데이터 분석 동영상 Edureka에서 시작 :

Apache Spark 교육 | Spark GraphX ​​비행 데이터 분석 | Edureka

질문이 있으십니까? 댓글 섹션에 언급 해 주시면 빠른 시일 내에 답변 드리겠습니다.

Spark를 배우고 Spark 도메인에서 경력을 쌓고 Real Life 사용 사례와 함께 RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​및 Scala를 사용하여 대규모 데이터 처리를 수행하기위한 전문 지식을 구축하려면 대화 형 라이브를 확인하십시오. -온라인 여기, 연중 무휴 지원이 제공되어 학습 기간 내내 안내합니다.