РДД користећи Спарк: Грађевински блок Апацхе Спарк



Овај блог о РДД-у који користи Спарк пружиће вам детаљно и свеобухватно знање о РДД-у, што је основна јединица Спарка и колико је корисно.

, Сама реч је довољна да створи искру у уму сваког инжењера Хадооп-а. ДО н у меморији алат за обраду што је муњевито у кластер рачунарству. У поређењу са МапРедуце-ом, дељење података у меморији чини РДД-ове 10-100к брже него дељење мреже и диска и све ово је могуће због РДД-ова (еластичних дистрибуираних скупова података). Кључне тачке на којима се данас фокусирамо у овом РДД-у користећи чланак Спарк су:

Потребни су вам РДД-ови?

Зашто нам треба РДД? -РДД користећи Спарк





Свет се развија са и Дата Сциенце због напредовања у . Алгоритми на бази Регресија , , и која тече даље Дистрибуирано Итеративе Цомпут атион мода која укључује поновну употребу и дељење података између више рачунарских јединица.

Традиционално техникама било је потребно стабилно средње и дистрибуирано складиште попут ХДФС обухватајући понављајуће прорачуне са репликацијама података и сериализацијом података, што је процес успорило много спорије. Проналажење решења никада није било лако.



Ово је место где РДД (Отпорни дистрибуирани скупови података) долази до велике слике.

РДД Једноставни су за употребу и без напора за стварање јер се подаци увозе из извора података и убацују у РДД-ове. Даље, примењују се операције за њихову обраду. Они су а дистрибуирана колекција меморије са дозволама као Само за читање и што је најважније јесу Отпоран на грешке .



Ако их има партиција података од РДД је изгубљен , може се обновити применом истог трансформација операција на тој изгубљеној партицији у лоза , него да обрађује све податке од нуле. Овакав приступ у сценаријима у стварном времену може учинити чуда у ситуацијама губитка података или када систем не ради.

Шта су РДД?

РДД или ( Скуп еластичних дистрибуираних података ) је основни структура података у Спарк-у. Термин Отпоран дефинише способност која аутоматски генерише податке или податке враћање до првобитно стање када се догоди неочекивана несрећа са вероватноћом губитка података.

пхп креира низ из низа

Подаци уписани у РДД-ове су преграђен и ускладиштено у више извршних чворова . Ако извршни чвор не успе у време извођења, онда одмах добија резервну копију са следећи извршни чвор . Због тога се РДД-ови сматрају напредном врстом структура података у поређењу са другим традиционалним структурама података. РДД могу чувати структуриране, неструктуриране и полуструктуриране податке.

Кренимо даље са нашим РДД-ом користећи Спарк блог и научимо о јединственим карактеристикама РДД-а што му даје предност у односу на друге типове структура података.

Карактеристике РДД-а

  • Ин-Мемори (РАМ) Рачунања : Концепт израчунавања у меморији води обраду података до брже и ефикасније фазе у којој се постиже целокупно перформансе система је надограђен.
  • Л његова Процена : Израз лења процена каже трансформације се примењују на податке у РДД-у, али излаз се не генерише. Уместо тога, примењене трансформације су пријављени.
  • Упорност : Добијени РДД-ови су увек за вишекратну употребу.
  • Грубозрнате операције : Корисник може применити трансформације на све елементе у скуповима података Мапа, филтер или група од операцијама.
  • Толерантна на грешку : Ако дође до губитка података, систем то може откотрљати се назад на свој првобитно стање коришћењем евидентираног трансформације .
  • Непроменљивост : Подаци не могу бити дефинисани, преузети или створени промењено након што се пријави у систем. У случају да вам је потребан приступ и модификација постојећег РДД-а, морате створити нови РДД применом скупа Трансформација функционише на тренутном или претходном РДД-у.
  • Преграђивање : То је пресудна јединица паралелизма у Варници РДД. Подразумевано је да је број створених партиција заснован на вашем извору података. Можете чак и да одлучите колико партиција желите да направите помоћу прилагођена партиција функције.

Стварање РДД-а помоћу Спарк-а

РДД-ови се могу креирати у три начина:

  1. Читање података из паралелизоване збирке
вал ПЦРДД = спарк.спаркЦонтект.параллелизе (Арраи ('Мон', 'Туе', 'Вед', 'Тху', 'Фри', 'Сат'), 2) вал ресултРДД = ПЦРДД.цоллецт () ресултРДД.цоллецт ( ) .фореацх (принтлн)
  1. Применом трансформација на претходним РДД-има
вал речи = спарк.спаркЦонтект.параллелизе (Сек ('Спарк', 'је', 'а', 'врло', 'моћан', 'језик')) вал вордпаир = вордс.мап (в = (в.цхарАт ( 0), в)) вордпаир.цоллецт (). Фореацх (принтлн)
  1. Читање података из спољна меморија или путање датотека попут ХДФС или ХБасе
вал Спаркфиле = спарк.реад.тектФиле ('/ усер / едурека_566977 / спарк / спарк.ткт.') Спаркфиле.цоллецт ()

Операције изведене на РДД-има:

Постоје углавном две врсте операција које се изводе на РДД-има, и то:

  • Трансформације
  • Акције

Трансформације : Тхе операцијама примењујемо на РДД-ове за филтер, приступ и модификовати подаци у матичном РДД-у за генерисање а узастопни РДД се зове трансформација . Нови РДД враћа показивач на претходни РДД осигуравајући зависност између њих.

Трансформације су Лази Евалуатионс, другим речима, операције примењене на РДД-у на којима радите биће евидентиране, али не погубљен. Систем даје резултат или изузетак након покретања поступак .

Трансформације можемо поделити на две врсте као што следи:

  • Уске трансформације
  • Широке трансформације

Уске трансформације Примењујемо уске трансформације на а појединачна партиција надређеног РДД-а за генерисање новог РДД-а јер су подаци потребни за обраду РДД-а доступни на једној партицији матични АСД . Примери за уске трансформације су:

  • Мапа()
  • филтер ()
  • флатМап ()
  • подела()
  • мапПартитионс ()

Широке трансформације: Широку трансформацију примењујемо на више партиција да би се генерисао нови РДД. Подаци потребни за обраду РДД-а доступни су на више партиција матични АСД . Примери за широке трансформације су:

  • редуцеБи ()
  • унија()

Акције : Акције упућују Апацхе Спарк да се пријави рачунање и проследите резултат или изузетак назад возачу РДД. Неколико акција укључује:

  • цоллецт ()
  • цоунт ()
  • узми ()
  • први()

Применимо практично операције на РДД-има:

ИПЛ (индијска Премиер лига) је крикет турнир са надањем на врхунском нивоу. Дакле, дозволимо данас да се докопамо ИПЛ скупа података и извршимо свој РДД користећи Спарк.

  • Прво, преузмимо ЦСВ податке о подударању ИПЛ-а. Након преузимања, почиње да изгледа као ЕКСЦЕЛ датотека са редовима и колонама.

У следећем кораку палимо искру и учитавамо датотеку матцх.цсв са своје локације, у мом случају мојецсвлокација датотеке је “/Усер/едурека_566977/тест/матцхес.цсв”

Почнимо сада са Трансформација први део:

  • Мапа():

Користимо Трансформација мапе да примени одређену операцију трансформације на сваки елемент РДД-а. Овде креирамо РДД под именом ЦКфиле где чувамо нашцсвдатотека. Створићемо још један РДД под називом Државе чувајте детаље о граду .

спарк2-схелл вал ЦКфиле = сц.тектФиле ('/ усер / едурека_566977 / тест / матцхес.цсв') ЦКфиле.цоллецт.фореацх (принтлн) вал стате = ЦКфиле.мап (_. сплит (',') (2)) стате.цоллецт (). фореацх (принтлн)

  • филтер ():

Трансформација филтера, само име описује његову употребу. Ову операцију трансформације користимо за филтрирање селективних података из колекције задатих података. Аплицирамо рад филтера овде да бисте добили евиденцију ИПЛ мечева године 2017 и чувајте га у фил РДД.

вал фил = ЦКфиле.филтер (линија => лине.цонтаинс ('2017')) фил.цоллецт (). фореацх (принтлн)

  • флатМап ():

Примјењујемо флатМап је операција трансформације за сваки од елемената РДД-а за стварање новогРДД-а. Слично је трансформацији Мапе. овде се пријављујемоФлатмапдо испљуните шибице града Хајдерабада и сачувајте податке уфилРДДРДД.

вал филРДД = фил.флатМап (линија => лине.сплит ('Хидерабад')). цоллецт ()

  • подела():

Сваки податак који упишемо у РДД подијељен је на одређени број партиција. Користимо ову трансформацију да бисмо пронашли број партиција подаци су заправо подељени на.

вал фил = ЦКфиле.филтер (линија => лине.цонтаинс ('2017')) фил.партитионс.сизе

  • мапПартитионс ():

МапПатитионс сматрамо алтернативом Мап () иза сваки() заједно. Овде користимо мапПартитионс да бисмо пронашли број редова имамо у нашем РДД-у.

вал фил = ЦКфиле.филтер (лине => лине.цонтаинс ('2016')) фил.мапПартитионс (идк => Арраи (идк.сизе) .итератор) .цоллецт

  • редуцеБи ():

КористимоРедуцеБи() на Парови кључ / вредност . Користили смо ову трансформацију на нашемцсвдатотеку да бисте пронашли плејер са највиши човек шибица .

вал МанОфТхеМатцх = ЦКфиле.мап (_. сплит (',') (13)) вал МОТМцоунт = МанОфТхеМатцх.мап (ВИНцоунт => (ВИНцоунт, 1)) вал МанОТХ = МОТМцоунт.редуцеБиКеи ((к, и) => к + и) .мап (туп => (туп._2, туп._1)) сортБиКеи (фалсе) МанОТХ.таке (10) .фореацх (принтлн)

како направити гомилу у јави
  • унија():

Име све објашњава, Ми користимо синдикалну трансформацију је да удружити два РДД-а заједно . Овде креирамо два РДД-а, наиме фил и фил2. фил РДД садржи евиденцију ИПЛ утакмица 2017. године, а фил2 РДД садржи евиденцију ИПЛ 2016 утакмице.

вал фил = ЦКфиле.филтер (линија => лине.цонтаинс ('2017')) вал фил2 = ЦКфиле.филтер (лине => лине.цонтаинс ('2016')) вал унинРДД = фил.унион (фил2)

Почнимо са поступак део где приказујемо стварни излаз:

  • цоллецт ():

Сакупљање је акција на коју навикнемо приказати садржај у РДД.

вал ЦКфиле = сц.тектФиле ('/ усер / едурека_566977 / тест / матцхес.цсв') ЦКфиле.цоллецт.фореацх (принтлн)

  • цоунт ():

Цоунтје акција коју користимо за бројање број записа присутан у РДД.Евокористимо ову операцију за бројање укупног броја записа у нашој датотеци матцхес.цсв.

вал ЦКфиле = сц.тектФиле ('/ усер / едурека_566977 / тест / матцхес.цсв') ЦКфиле.цоунт ()

  • таке ():

Таке је операција акције слична сличној сакупљању, али једина разлика је у томе што се може одштампати било која селективни број редова према захтеву корисника. Овде примењујемо следећи код за штампање десет водећих извештаја.

вал статецоунтм = Сцоунт.редуцеБиКеи ((к, и) => к + и) .мап (туп => (туп._2, туп._1)) сортБиКеи (фалсе) статецоунтм.цоллецт (). фореацх (принтлн) статецоунтм. таке (10) .фореацх (принтлн)

шта је прекид реда у хтмл-у
  • први():

Фирст () је акциона операција слична скупљању () и преузимању ()токористи се за штампање највишег извештаја с резултата Овде користимо прву () операцију за проналажење максималан број одиграних мечева у одређеном граду а као резултат добијамо Мумбаи.

вал ЦКфиле = сц.тектФиле ('/ усер / едурека_566977 / тест / матцхес.цсв') вал стања = ЦКфиле.мап (_. сплит (',') (2)) вал Сцоунт = стате.мап (Сцоунт => ( Сцоунт, 1)) сцала & гт вал статецоунт = Сцоунт.редуцеБиКеи ((к, и) => к + и) .цоллецт.фореацх (принтлн) Сцоунт.редуцеБиКеи ((к, и) => к + и) .цоллецт.фореацх (принтлн) вал статецоунтм = Сцоунт.редуцеБиКеи ((к, и) => к + и) .мап (туп => (туп._2, туп._1)) сортБиКеи (лажно) статецоунтм.фирст ()

Да бих наш процес учења РДД-а помоћу Спарка учинио још занимљивијим, смислио сам занимљив случај употребе.

РДД користећи Спарк: Покемон Усе Цасе

  • Прво, Преузмимо датотеку Покемон.цсв и учитајмо је у варницу, као што смо то учинили у датотеку Матцхес.цсв.
вал ПокемонДатаРДД1 = сц.тектФиле ('/ усер / едурека_566977 / ПокемонФиле / ПокемонДата.цсв') ПокемонДатаРДД1.цоллецт (). фореацх (принтлн)

Покемони су заправо доступни у великој разноликости. Пронађимо неколико сорти.

  • Уклањање шеме из датотеке Покемон.цсв

Можда нам неће требати Шема датотеке Покемон.цсв. Стога га уклањамо.

вал Хеад = ПокемонДатаРДД1.фирст () вал НоХеадер = ПокемонДатаРДД1.филтер (линија =>! лине.екуалс (Хеад))

  • Проналажење броја преграде наш покемон.цсв се дистрибуира у.
принтлн ('Но.офпартитионс =' + НоХеадер.партитионс.сизе)

  • Водени Покемон

Проналажење број водених покемона

вал ВатерРДД = ПокемонДатаРДД1.филтер (лине => лине.цонтаинс ('Ватер')) ВатерРДД.цоллецт (). фореацх (принтлн)

  • Фире Покемон

Проналажење број Фире Покемон

вал ФиреРДД = ПокемонДатаРДД1.филтер (лине => лине.цонтаинс ('Фире')) ФиреРДД.цоллецт (). фореацх (принтлн)

  • Такође можемо открити Популација другог типа покемона помоћу функције бројања
ВатерРДД.цоунт () ФиреРДД.цоунт ()

  • Пошто волим игру одбрамбена стратегија пронађимо покемон са максимална одбрана.
вал дефенцеЛист = НоХеадер.мап {к => к.сплит (',')}. мап {к => (к (6) .тоДоубле)} принтлн ('Хигхест_Дефенце:' + дефенцеЛист.мак ())

  • Знамо максимум вредност одбрамбене снаге али не знамо који је то покемон. па, хајде да пронађемо шта је то покемон.
вал дефВитхПокемонНаме = НоХеадер.мап {к => к.сплит (',')}. мап {к => (к (6) .тоДоубле, к (1))} вал МакДефенцеПокемон = дефВитхПокемонНаме.гроупБиКеи.такеОрдеред (1) (Наручивање [Доубле] .реверсе.он (_._ 1)) МакДефенцеПокемон.фореацх (принтлн)

  • Хајде сада да средимо покемон са најмање Одбрана
вал минДефенцеПокемон = дефенцеЛист.дистинцт.сортБи (к => к.тоДоубле, труе, 1) минДефенцеПокемон.таке (5) .фореацх (принтлн)

  • Сада да видимо Покемоне са мање одбрамбена стратегија.
вал ПокемонДатаРДД2 = сц.тектФиле ('/ усер / едурека_566977 / ПокемонФиле / ПокемонДата.цсв') вал Хеад2 = ПокемонДатаРДД2.фирст () вал НоХеадер2 = ПокемонДатаРДД2. .мап {к => к.сплит (',')}. мап {к => (к (6) .тоДоубле, к (1))} вал МинДефенцеПокемон2 = дефВитхПокемонНаме2.гроупБиКеи.такеОрдеред (1) (Ордеринг [Доубле ] .он (_._ 1)) МинДефенцеПокемон2.фореацх (принтлн)

Дакле, овим смо дошли до краја овог РДД-а користећи чланак Спарк. Надам се да смо осветлили ваше знање о РДД-има, њиховим карактеристикама и разним врстама операција које се могу извршити на њима.

Овај чланак заснован на је дизајниран да вас припреми за испит за сертификацију програмера Цлоудера Хадооп анд Спарк (ЦЦА175). Стећи ћете детаљно знање о Апацхе Спарк и Спарк екосистему, који укључује Спарк РДД, Спарк СКЛ, Спарк МЛлиб и Спарк Стреаминг. Стећи ћете свеобухватно знање о програмском језику Сцала, ХДФС, Скооп, Флуме, Спарк ГрапхКс и систему за размену порука као што је Кафка.