Апацхе Пиг УДФ: Део 2 - Функције учитавања



Овај пост описује Апацхе Пиг УДФ - функције учитавања. (Апацхе Пиг УДФ: 2. део). Погледајте функције учитавања Апацхе Пиг УДФ.

Данашњи пост говори о функцијама учитавања у Апацхе Пиг-у. Ово је наставак први пост која је покривала функције УДФ-а попут Евал, Филтер и Аггрегате. Молимо вас да их контактирате за више информација о другим функцијама Свињског УДФ-а.





примена аналитике великих података

Функција учитавања свиња изграђена је на врху Хадооп-овог ИнпутФормат-а, класе коју Хадооп користи за читање података. ИнпутФормат има две сврхе: Одређује како ће унос бити фрагментиран између задатака мапе и пружа РецордРеадер који резултира паровима кључ / вредност као улаз у те задатке мапе. Основна класа за функцију учитавања је ЛоадФунц.

Функција оптерећења - Класификација:

Апстрактна класа ЛоадФунц има три главне методе за учитавање података и у већини случајева било би довољно проширити их. Постоје још три опционална интерфејса која се могу применити за постизање проширене функционалности:



  • ЛоадМетадата:

ЛоадМетадата има методе за обраду метаподатака. Већина извршних програма за учитавање не мора ово да примењује уколико не ступе у интеракцију са системом метаподатака. Метода гетСцхема () у овом интерфејсу нуди начин за имплементације лоадер-а да комуницирају о шеми података натраг на Пиг. Ако имплементација лоадер-а врати податке који се састоје од поља стварних типова, требало би да пружи шему која описује податке враћене методом гетСцхема (). Остале методе се баве другим врстама метаподатака попут партицијских кључева и статистике. Имплементације могу вратити нулл вредности за ове методе ако нису ваљане за другу имплементацију.

  • ЛоадПусхДовн:

ЛоадПусхДовн има различите методе за гурање операција из Пиг рунтимеа у имплементације лоадер-а. Тренутно Пиг позива само методу пусхПројецтион () да би комуницирао са утоваривачем, тачно тачна поља која су потребна у Пиг скрипти. Имплементација утоваривача може изабрати да ли ће се придржавати или не испуњавати захтев. Ако имплементација лоадер-а одлучи да се повинује захтеву, требало би да имплементира ЛоадПусхДовн ради побољшања перформанси упита.

  • пусхПројецтион ():

Ова метода обавештава ЛоадФунц, која су поља обавезна у Пиг скрипти. Омогућавајући тако ЛоадФунц да побољша перформансе учитавањем само потребних поља. пусхПројецтион () узима „рекуиредФиелдЛист.“ „рекуиредФиелдЛист“ је само за читање и ЛоадФунц га не може променити. „РекуиредФиелдЛист“ укључује листу „рекуиредФиелд“, где свако „рекуиредФиелд“ означава поље које захтева Пиг скрипта и састоји се од индекса, псеудонима, типа и потпоља. Пиг користи индекс колоне рекуиредФиелд.индек за комуникацију са ЛоадФунц-ом о пољима која су потребна у Пиг скрипти. Ако је обавезно поље мапа, Свиња ће проследити „рекуиредФиелд.субФиелдс“ која садржи листу кључева потребних Пиг скриптама за мапу.



метода систем.екит ће завршити апликацију.
  • ЛоадЦастер:

ЛоадЦастер има технике за претварање бајт поља у одређене типове. Имплементација лоадер-а би то требало да примени када треба подржати имплицитно или експлицитно пребацивање из поља ДатаБитеАрраи у друге типове.

Апстрактна класа ЛоадФунц је главна класа коју треба проширити за примену лоадер-а. Методе које треба надјачати објашњене су у наставку:

  • гетИнпутФормат ():

    Ову методу позива Пиг да би добио ИнпутФормат који користи лоадер. Методе у ИнпутФормат-у Пиг позива на исти начин као и Хадооп у Јава МапРедуце програму. Ако је ИнпутФормат пакет упакован у Хадооп, имплементација треба да користи нови АПИ заснован под орг.апацхе.хадооп.мапредуце. Ако се ради о прилагођеном ИнпутФормат-у, боље је применити нови АПИ у орг.апацхе.хадооп.мапредуце.

  • сетЛоцатион ():

    Ову методу позива Свиња да саопшти место утовара утоваривачу. Утоваривач треба да користи ову методу за пренос истих информација у језгро ИнпутФормат. Свиња ову методу назива више пута.

  • припремаТоРеад ():

    У овој методи, РецордРеадер повезан са ИнпутФормат-ом који пружа ЛоадФунц прослеђује се ЛоадФунц-у. РецордРеадер сада може да се користи од имплементације у гетНект () за враћање корпе која представља запис података назад у Пиг.

  • гетНект ():

    Значење гетНект () се није променило и Пиг рунтиме га позива да прикупи следећу гомилу података. У овом методу, имплементација треба да користи основни РецордРеадер и да конструише корпицу за повратак.

Подразумеване имплементације у ЛоадФунц:

Имајте на уму да би подразумеване имплементације у ЛоадФунц требало заменити само када је то потребно.

  • сетУдфЦонтектСигнатуре ():

    Ову методу ће позвати Пиг, како на предњем, тако и на задњем крају како би проследио јединствени потпис Лоадеру. Потпис се може користити за чување било којих информација у УДФЦонтект-у које Лоадер треба да ускладишти између различитих позива метода у предњем и задњем крају. Случај употребе је чување РекуиредФиелдЛист-а који му је прослеђен у ЛоадПусхДовн.пусхПројецтион (РекуиредФиелдЛист) за употребу на задњем крају пре враћања корпица у гетНект (). Подразумевана имплементација у ЛоадФунц има празно тело. Ова метода ће бити позвана пре осталих метода.

  • релативеТоАбсолутеПатх ():

    Време извођења свиња позваће ову методу да омогући Лоадер-у да претвори релативну локацију оптерећења у апсолутну локацију. Подразумевана имплементација обезбеђена у ЛоадФунц рукује овим за локације ФилеСистем-а. Ако је извор учитавања нешто друго, имплементација лоадер-а може одлучити да ово поништи.

Имплементација лоадер-а у примеру је лоадер за текстуалне податке са разграничитељем линија као „
‘И‘ ‘као подразумевани граничник поља сличан тренутном ПигСтораге утоваривачу у Пиг-у. Имплементација користи постојећи Инпутформат који подржава Хадооп - ТектИнпутФормат - као основни ИнпутФормат.

ц ++ како сортирати низ
јавна класа СимплеТектЛоадер проширује ЛоадФунц {заштићени РецордРеадер у = нулл приватни бајт фиелдДел = '' привате АрраиЛист мПротоТупле = нулл привате ТуплеФацтори мТуплеФацтори = ТуплеФацтори.гетИнстанце () привате статиц финал инт БУФФЕР_СИЗЕ = 1024 публиц СимплеТектЛоер * Цонтектструцт (Цонструцтед) Уређај за свињу који користи наведени знак као граничник поља. * * @парам граничник * једнобајтни знак који се користи за одвајање поља. * ('' је подразумевано.) * / публиц СимплеТектЛоадер (Граничник низа) {тхис () иф (делимитер.ленгтх () == 1) {тхис.фиелдДел = (бите) делимитер.цхарАт (0)} елсе иф ( делимитер.ленгтх ()> 1 & & делимитер.цхарАт (0) == '') {свитцх (делимитер.цхарАт (1)) {цасе 'т': тхис.фиелдДел = (бите) '' бреак цасе 'к' : фиелдДел = Интегер.валуеОф (граничник.супстринг (2), 16) .битеВалуе () преломни случај 'у': тхис.фиелдДел = Интегер.валуеОф (граничник.субстринг (2)). битеВалуе () прекид подразумевано: баци ново РунтимеЕкцептион ('Непознати граничник' + граничник)}} елсе {бацати нови РунтимеЕкцептион ('ПигСтораге делиметер мора бити један знак')}} @Оверриде публиц Тупле гетНект () баца ИОЕкцептион {три {боолеан нотДоне = ин.нектКеиВалуе () (нотДоне) {ретурн нулл} Вредност текста = (Тект) ин.гетЦуррентВалуе () бите [] буф = валуе.гетБитес () инт лен = валуе.гетЛенгтх () инт старт = 0 фор (инт и = 0 иИмате питање за нас? Молимо вас да то споменете у одељку за коментаре и јавићемо вам се. 

Повезани постови: