Апацхе Пиг УДФ: 3. део - функције складишта



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

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





СтореМетадата

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

Методе које треба надјачати у СтореФунц-у су објашњене у наставку:



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

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

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

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

  • припремаТоВрите ():

    У новом АПИ-ју, писање података се врши путем ОутпутФормат-а који пружа СтореФунц. У припремТоВрите () РецордВритер придружен ОутпутФормат-у који пружа СтореФунц прослеђује се СтореФунц-у. РецордВритер затим може да се користи од имплементације у путНект () за писање корпе која представља запис података на начин који очекује РецордВритер.

  • путНект ():

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

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

  • сетСтореФунцУДФЦонтектСигнатуре ():

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

  • релТоАбсПатхФорСтореЛоцатион ():

    Свиња за време извођења позваће ову методу да омогући Стореру да претвори релативну локацију продавнице у апсолутну локацију. Имплементација је обезбеђена у СтореФунц која то обрађује за локације засноване на ФилеСистем-у.

  • цхецкСцхема ():

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

Пример примене:

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

јавна класа СимплеТектСторер проширује СтореФунц {заштићени РецордВритер вритер = нулл приватни бајт фиелдДел = '' привате статиц финал инт БУФФЕР_СИЗЕ = 1024 привате статиц финал Стринг УТФ8 = 'УТФ-8' публиц ПигСтораге () {} публиц ПигСтораге (граничник низа) {тхис ( ) иф (делимитер.ленгтх () == 1) {тхис.фиелдДел = (бите) делимитер.цхарАт (0)} елсе иф (делимитер.ленгтх ()> 1делимитер.цхарАт (0) == '') {свитцх ( делимитер.цхарАт (1)) {цасе 'т': тхис.фиелдДел = (бите) '' бреак цасе 'к': фиелдДел = Интегер.валуеОф (делимитер.субстринг (2), 16) .битеВалуе () цасе цасе ' у ': тхис.фиелдДел = Интегер.валуеОф (делимитер.субстринг (2)). битеВалуе () бреак дефаулт: баци нови РунтимеЕкцептион (' Непознати граничник '+ граничник)}} елсе {баци нови РунтимеЕкцептион (' ПигСтораге делиметар мора бити један знак ')}} БитеАрраиОутпутСтреам мОут = нев БитеАрраиОутпутСтреам (БУФФЕР_СИЗЕ) @Оверриде публиц воид путНект (Тупле ф) баца ИОЕкцептион {инт сз = ф.сизе () фор (инт и = 0 и

Имате питање за нас? Молимо вас да их наведете у одељку за коментаре и јавићемо вам се.

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



Водичи за визуелни студио за почетнике

Апацхе Пиг УДФ: 2. део
Апацхе Пиг УДФ: 1. део