Помозите развоју веб локације, дељење чланка са пријатељима!

Увод у Спарк Трансформације

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

Типови трансформација у Спарк

Они су широко категорисани у два типа:

  • Уска трансформација: Сви подаци потребни за израчунавање записа у једној партицији налазе се у једној партицији родитељског РДД-а. То се дешава у случају следећих метода:

мап(), флатМап(), филтер(), сампле(), унион() итд.

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

дистинцт(), гроупБиКеи(), редуцеБиКеи(), јоин() , репартитион() итд.

Примери трансформације искре

Овде разматрамо примере поменуте у наставку.

1. Уске трансформације

  • мап(): Ова функција узима функцију као параметар и примењује ову функцију на сваки елемент РДД-а.

Шифра:

"вал цонф=нев СпаркЦонф().сетМастер(лоцал).сетАппНаме(тестАпп)"
вал сц=СпаркЦонтект.гетОрЦреате(цонф)
"сц.сетЛогЛевел(ЕРРОР)
"вал рдд=сц.параллелизе(Арраи(10,15,50,100))
"принтлн(Основни РДД је:)
">"рдд.фореацх(к=принт(к+ ))<бр /"
принтлн()
>вал рддНев=рдд.мап(к=к+10)<бр /
"принтлн(РДД након примене МАП методе:)
""рддНев.фореацх(к=>принт(к+))

Излаз:

У горњој МАП методи, додајемо сваки елемент за 10 и то се одражава у излазу.

  • ФлатМап(): Слично је карти, али може генерисати више излазних ставки које одговарају једној улазној ставци. Дакле, функција мора да врати низ уместо једне ставке.

Шифра:

"вал цонф=нев СпаркЦонф().сетАппНаме(тест).сетМастер(лоцал)"
вал сц=нови СпаркЦонтект(цонф)
"сц.сетЛогЛевел(ВАРН)
""вал рдд=сц.параллелизе(Арраи(1:2:3,4:5:6))
">"вал рддНев=рдд.флатМап(к=к.сплит(:))<бр /"
"рддНев.фореацх(к=>принт(к+))

Излаз:

Ова функција је прослеђена као параметар дели сваки унос са „:” и враћа низ, а ФлатМап метода изравнава низ.

  • филтер(): Узима функцију као параметар и враћа све елементе РДД-а за које функција враћа труе.

Шифра:

"вал цонф=нев СпаркЦонф().сетМастер(лоцал).сетАппНаме(тестАпп)"
вал сц=СпаркЦонтект.гетОрЦреате(цонф)
"сц.сетЛогЛевел(ЕРРОР)
""вал рдд=сц.параллелизе(Арраи(цом.вхатсапп.прод,цом.фацебоок.прод,цом.инстаграм.прод,цом.вхатсапп.тест))
""принтлн(Основни РДД је:)
">"рдд.фореацх(к=принт(к+ ))<бр /"
принтлн()
>"вал рддНев=рдд.филтер (к=!к.цонтаинс(тест))<бр /"
"принтлн(РДД након примене МАП методе:)
""рддНев.фореацх(к=>принт(к+))

Излаз:

У горњем коду узимамо низове који немају реч "тест".

  • сампле(): Враћа део података, са или без замене, користећи дато семе генератора случајних бројева (ово је ипак опционо).

Шифра:

"вал цонф=нев СпаркЦонф().сетАппНаме(тест).сетМастер(лоцал)"
вал сц=нови СпаркЦонтект(цонф)
"сц.сетЛогЛевел(ВАРН)
"вал рдд=сц.параллелизе(Низ(1,2,3,4,5,6,7,10,11,12,15,20,50))
вал рддНев=рдд.сампле(фалсе,.5)
"рддНев.фореацх(к=>принт(к+))

Излаз:

У горњем коду, добијамо насумичне узорке без замене.

  • унион(): Враћа унију изворног РДД-а и РДД-а прослеђеног као параметра.

Шифра:

"вал цонф=нев СпаркЦонф().сетАппНаме(тест).сетМастер(лоцал)"
вал сц=нови СпаркЦонтект(цонф)
"сц.сетЛогЛевел(ВАРН)
"вал рдд=сц.параллелизе(Арраи(1,2,3,4,5))
вал рдд2=сц.параллелизе(Низ(-1,-2,-3,-4,-5))
вал рддУнион=рдд.унион(рдд2)
"рддУнион.фореацх(к=>принт(к+ ))

Излаз:

Резултантни РДД рддУнион садржи све елементе из рдд и рдд2.

2. Широке трансформације

  • дистинцт(): Овај метод враћа различите елементе РДД-а.

Шифра:

"вал цонф=нев СпаркЦонф().сетМастер(лоцал).сетАппНаме(тестАпп)"
вал сц=СпаркЦонтект.гетОрЦреате(цонф)
"сц.сетЛогЛевел(ЕРРОР)
"вал рдд=сц.параллелизе(Арраи(1,1,3,4,5,5,5))
"принтлн(Основни РДД је:)
">"рдд.фореацх(к=принт(к+ ))<бр /"
принтлн()
вал рддНев=рдд.дистинцт()
"принтлн(РДД након примене МАП методе:)
""рддНев.фореацх(к=>принт(к+))

Излаз:

добијамо различите елементе 4,1,3,5 у излазу.

  • гроупБиКеи(): Ова функција је применљива на упарене РДД-ове. РДД у пару је онај код кога је сваки елемент торка где је први елемент кључ, а други елемент вредност. Ова функција групише све вредности које одговарају кључу.

Шифра:

"вал цонф=нев СпаркЦонф().сетАппНаме(тест).сетМастер(лоцал)"
вал сц=нови СпаркЦонтект(цонф)
"сц.сетЛогЛевел(ВАРН)
""вал рдд=сц.параллелизе(Арраи((а,1),(б,2),(а,3),(б,10),(а,100)))
"вал рддНев=рдд.гроупБиКеи()
"рддНев.фореацх(к=>принт(к+))

Излаз:

Као што се и очекивало, све вредности за кључеве “а” и “б” су груписане заједно.

  • редуцеБиКеи(): Ова операција је такође применљива на РДД-ове у пару. Он агрегира вредности за сваки кључ према достављеној методи редукције која мора бити типа (в,в)=в.

Шифра:

"вал цонф=нев СпаркЦонф().сетАппНаме(тест).сетМастер(лоцал)"
вал сц=нови СпаркЦонтект(цонф)
"сц.сетЛогЛевел(ВАРН)
""вал рдд=сц.параллелизе(Арраи((а,1),(б,2),(а,3),(б,10),(а,100),(ц,50)))
">вал рддНев=рдд.редуцеБиКеи((к,и)=к+и )<бр /
"рддНев.фореацх(к=>принт(к+))

Излаз:

У горњем случају, сумирамо све вредности кључа.

  • јоин(): Операција спајања је применљива на РДД-ове упарене. Метод спајања комбинује два скупа података на основу кључа.

Шифра:

"вал цонф=нев СпаркЦонф().сетМастер(лоцал).сетАппНаме(тестАпп)"
вал сц=СпаркЦонтект.гетОрЦреате(цонф)
"сц.сетЛогЛевел(ЕРРОР)
""вал рдд1=сц.параллелизе(Арраи((кеи1,10),(кеи2,15),(кеи3,100)))
""вал рдд2=сц.параллелизе(Низ((кључ2,11),(кључ2,20),(кључ1,75)))
"вал рддЈоинед=рдд1.јоин(рдд2)
"принтлн(РДД након придруживања:)
""рддЈоинед.фореацх(к=>принт(к+ ))

Излаз:

  • репартитион(): Пребацује податке у РДД насумично у број партиција које се прослеђују као параметар. Може и повећати и смањити партиције.

Шифра:

"вал цонф=нев СпаркЦонф().сетАппНаме(тест).сетМастер(лоцал)"
вал сц=нови СпаркЦонтект(цонф)
"сц.сетЛогЛевел(ВАРН)
"вал рдд=сц.параллелизе(Арраи(1,2,3,4,5,10,15,18,243,50),10)
"принтлн(Партиције пре: +рдд.гетНумПартитионс)
"вал рддНев=рдд.репартитион(15)
"принтлн(Партиције након: +рддНев.гетНумПартитионс)"

Излаз:

У горњем случају, повећавамо партиције са 10 на 15.

Помозите развоју веб локације, дељење чланка са пријатељима!