Урок за Spark GraphX ​​- Анализ на графики в Apache



Този блог с урок за GraphX ​​ще ви запознае с Apache Spark GraphX, неговите функции и компоненти, включително проект за анализ на полетни данни.

GraphX е API на Apache Spark за графики и графично-паралелни изчисления. GraphX ​​обединява ETL (Extract, Transform & Load) процес, проучвателен анализ и итеративно изчисление на графика в рамките на една система. Използването на графики може да се види в приятелите на Facebook, връзките на LinkedIn, рутерите на интернет, връзките между галактиките и звездите в астрофизиката и Google Maps. Въпреки че концепцията за изчисляване на графики изглежда много проста, приложенията на графиките са буквално неограничени със случаи на използване при откриване на бедствия, банкиране, фондов пазар, банкови и географски системи, само за да назовем само няколко.Изучаването на използването на този API е важна част от .Чрез този блог ще научим концепциите на Spark GraphX, неговите характеристики и компоненти чрез примери и ще преминем през пълен случай на използване на Flight Data Analytics с помощта на GraphX.

Ще разгледаме следните теми в този блог на Spark GraphX:





  1. Какво представляват графиките?
  2. Използвайте случаи на графични изчисления
  3. Какво е Spark GraphX?
  4. Функции на Spark GraphX
  5. Разбиране на GraphX ​​с примери
  6. Случай на употреба - Анализ на полетни данни с помощта на GraphX

Какво представляват графиките?

Графиката е математическа структура, представляваща набор от обекти, в които някои двойки от обекти са свързани в някакъв смисъл. Тези отношения могат да бъдат представени с помощта на ръбове и върхове, образуващи графика. Върховете представляват обектите, а ръбовете показват различните връзки между тези обекти.

Графични концепции - Урок за Spark GraphX ​​- EdurekaФигура: Урок за Spark GraphX ​​- върхове, ръбове и тризнаци в графики



В информатиката графиката е абстрактен тип данни, който е предназначен да реализира недиректираните графични и насочени графични концепции от математиката, по-специално областта на теорията на графовете. Структурата на графични данни може също да свързва всеки ръб с някои стойност на ръба , като символен етикет или цифров атрибут (цена, капацитет, дължина,и т.н.).

Използвайте случаи на графични изчисления

Следващите случаи на употреба дават перспектива за изчисляване на графики и допълнителен обхват за прилагане на други решения, използващи графики.

  1. Система за откриване на бедствия

    Графиките могат да се използват за откриване на бедствия като урагани, земетресения, цунами, горски пожари и вулкани, така че да предоставят предупреждения за предупреждение на хората.



    как да създадете масив от обекти
  2. Ранк на страницата Page Rank може да се използва при намирането на влиятелни във всяка мрежа, като мрежа за цитиране на хартия или мрежа за социални медии.
  3. Разкриване на финансови измами

    Графичният анализ може да се използва за наблюдение на финансови транзакции и откриване на хора, замесени във финансови измами и пране на пари.

  4. Бизнес анализ

    Графиките, когато се използват заедно с машинното обучение, помагат за разбирането на тенденциите на покупките на клиентите. Напр. 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 ​​- Пример за графика

Разглеждайки графиката, можем да извлечем информация за хората (върхове) и връзките между тях (ръбове). Графиката тук представя потребителите на Twitter и кого следват в 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] = Graph (vertexRDD, edgeRDD) graph.vertices.filter {case (id, (name, age)) => age> 30} .collect.foreach {case (id, (name, age)) => println ( s '$ name is $ age')}

Резултатът за горния код е както по-долу:

Дейвиде42 Франепетдесет Изде55 Чарлие65

Показване на ръбове : Нека разгледаме кой човек кого харесва в Twitter.

за (триплет<- graph.triplets.collect) { println(s'${triplet.srcAttr._1} likes ${triplet.dstAttr._1}') } 

Резултатът за горния код е както по-долу:

БобхаресваАлис БобхаресваДейвид ЧарлихаресваБоб ЧарлихаресваФран ДейвидхаресваАлис ИздхаресваБоб ИздхаресваЧарли ИздхаресваФран

Сега, след като разбрахме основите на GraphX, нека се потопим малко по-дълбоко и да извършим някои разширени изчисления върху същото.

Брой последователи : Всеки потребител в нашата графика има различен брой последователи. Нека разгледаме всички последователи за всеки потребител.

// Дефиниране на клас за по-ясно моделиране на потребителския клас случай на потребител (име: String, възраст: Int, inDeg: Int, outDeg: Int) // Създаване на потребител Графика val InitiUserGraph: Графика [Потребител, Int] = графика. 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, свойство)<- 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 najstFollower: 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 в бъдеще.

факториал на номер java

Декларация за проблема : За да анализирате данните за полет в реално време с помощта на Spark GraphX, предоставете резултати от изчисления почти в реално време и визуализирайте резултатите с помощта на Google Data Studio.

Случай на употреба - Изчисления, които трябва да се направят :

  1. Изчислете общия брой полетни маршрути
  2. Изчислете и сортирайте най-дългите полетни маршрути
  3. Показване на летището с връх с най-висока степен
  4. Избройте най-важните летища според PageRank
  5. Избройте маршрутите с най-ниски разходи за полет

Ще използваме Spark GraphX ​​за горните изчисления и ще визуализираме резултатите с помощта на Google Data Studio.

Случай на употреба - набор от данни :

Фигура: Случай за употреба - САЩ Flight Dataset

Случай на употреба - диаграма на потока :

Следващата илюстрация ясно обяснява всички стъпки, включени в нашия анализ на полетни данни.

c ++ масив за сортиране във възходящ ред

Фигура: Случай на употреба - Диаграма на поточния анализ на полетни данни с помощта на Spark GraphX

Случай на употреба - внедряване на Spark :

Продължавайки напред, сега нека реализираме нашия проект, използвайки 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) // Дефиниране на функция за анализиране на низ за анализиране на входа в клас Flight 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 flightRDD = Карта ParseFlight към текст RDD // Създаване на летища RDD с ID и име val летища = Map Flight OriginID и Origin airports.take (1) // Дефиниране на връх по подразбиране, наречен никъде, и картографиране на ID на летище за printlns val nowhere = 'никъде' val airportMap = Използвайте функцията на картата .collect.toList.toMap // Създаване на маршрути RDD с sourceID, destinationID и разстояние вал маршрути = полети RDD. Използвайте функцията за карта .distinct routes.take (2) // Създаване на RDD на ръбове с sourceID, destinationID и разстояние val ръбове = routes.map {(Map OriginID и DestinationID) => Edge (org_id.toLong, dest_id.toLong, distance)} edge.take (1) // Дефинирайте графиката и покажете някои върхове и ръбове val graph = Графика (Летища, ръбове и никъде) graph.vertices.take (2) graph.edges.take (2) // Заявка 1 - Намерете общият брой летища val numairports = Номер на върховете // Запитване 2 - Изчисляване на общия брой маршрути? val numroutes = Number Of Edges // Запитване 3 - Изчислете тези маршрути с разстояния повече от 1000 мили graph.edges.filter {Вземете разстоянието на ръба) => разстояние> 1000} .take (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. Ще използваме услугата Geo Map, за да картографираме летищата на съответните им местоположения на картата на САЩ и да покажем количеството метрики.

  1. Показва общия брой полети на летище
  2. Покажете метричната сума на маршрутите за дестинация от всяко летище
  3. Показва общото закъснение на всички полети на летище

Това завършва блога на Spark GraphX. Надявам се да ви е харесало да го прочетете и да го намерите информативен. Разгледайте следващия блог от нашата серия Apache Spark на да станат готови за пазара в Apache Spark.

Препоръчваме следното Обучение на Apache Spark | Видео за анализ на полетни данни от Edureka да започнем с:

Обучение на Apache Spark | Анализ на полетни данни на Spark GraphX ​​| Едурека

Имате въпрос към нас? Моля, споменете го в раздела за коментари и ние ще се свържем с вас най-рано.

Ако искате да научите Spark и да изградите кариера в областта на Spark и да изградите опит за извършване на мащабна обработка на данни с помощта на RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​и Scala с реални случаи на използване, разгледайте нашите интерактивни, на живо -на линия тук, който идва с поддръжка 24 * 7, за да ви води през целия период на обучение.