A mai bejegyzés az Apache Pig betöltési funkcióiról szól. Ez a folytatása a első poszt amely lefedte az UDF funkciókat, mint például az Eval, a Filter és az Aggregate. Kérjük, forduljon hozzájuk, ha további információt szeretne a Pig UDF egyéb funkcióiról.
A Pig betöltési funkciója a Hadoop InputFormat tetejére épül, arra az osztályra, amelyet Hadoop használ az adatok olvasására. Az InputFormat-nak két célja van: Meghatározza, hogy a bemenet hogyan lesz feldarabolva a térképi feladatok között, és egy RecordReader-t biztosít, amely kulcs-érték párokat eredményez az adott térképi feladatok bemeneteként. A betöltési függvény alaposztálya a LoadFunc.
hogyan lehet deklarálni a dinamikus tömböt a java-ban
Terhelési funkció - osztályozás:
A LoadFunc absztrakt osztálynak három fő módszere van az adatok betöltésére, és a legtöbb esetben elegendő lenne kibővíteni. Három további opcionális interfész létezik, amelyek megvalósíthatók a kibővített funkcionalitás elérése érdekében:
LoadMetadata:
A LoadMetadata rendelkezik módszerekkel a metaadatok kezelésére. A betöltők legtöbb végrehajtásának csak akkor kell ezt végrehajtania, ha a metaadat-rendszerrel lépnek kapcsolatba. Ezen a felületen a getSchema () metódus lehetőséget kínál a betöltő implementációk számára, hogy az adatok sémájáról visszamenjenek a Pig felé. Ha egy betöltő megvalósítás valódi típusú mezőkből álló adatokat ad vissza, meg kell adnia a getSchema () módszerrel visszaadott adatokat leíró sémát. A többi módszer más típusú metaadatokkal foglalkozik, például partíciókulcsokkal és statisztikákkal. A megvalósítások visszatérési értékeket adhatnak vissza ezekhez a módszerekhez, ha azok nem érvényesek a másik megvalósításra.
LoadPushDown:
A LoadPushDown különböző módszerekkel állítja elő a műveleteket a Pig futásidejéből a betöltő megvalósításaiba. Jelenleg csak a pushProjection () metódust hívja meg Pig, hogy kommunikálja a betöltővel a pontos mezőket, amelyekre a Pig szkriptben van szükség. A betöltő implementáció választhatja a kérés betartását vagy nem teljesítését. Ha a betöltő megvalósítása úgy dönt, hogy betartja a kérést, akkor a LoadPushDown programot kell végrehajtania a lekérdezés teljesítményének javítása érdekében.
pushProjection ():
Ez a módszer tájékoztatja a LoadFunc-ot, mely mezőkre van szükség a Pig szkriptben. Így lehetővé téve a LoadFunc számára a teljesítmény növelését azáltal, hogy csak a szükséges mezőket tölti be. A pushProjection () egy 'requiredFieldList' -et vesz fel. A 'requiredFieldList' csak olvasható, és a LoadFunc nem változtathatja meg. A ’requiredFieldList’ tartalmazza a ’requiredField’ listáját, ahol minden ’requiredField’ a Pig szkript által megkövetelt mezőt jelöli, és indexből, álnévből, típusból és almezőkből áll. A Pig az requiredField.index oszlopindexet használja, hogy kommunikáljon a LoadFunc-nal a Pig parancsfájl által megkövetelt mezőkről. Ha a kötelező mező egy térkép, akkor Pig átadja a 'requiredField.subFields' fájlt, amely tartalmazza a Pig szkriptek által a térképhez szükséges kulcsok listáját.
java kettőssé vált int
LoadCaster:
A LoadCaster rendelkezik olyan technikákkal, amelyekkel a bájt tömbök meghatározott típusokká konvertálhatók. A betöltő megvalósításának akkor kell ezt megvalósítania, ha támogatni kell a DataByteArray mezőkből implicit vagy explicit átküldéseket más típusokba.
A LoadFunc absztrakt osztály a fő osztály, amelyet ki kell terjeszteni a betöltő megvalósításához. A felülírandó módszereket az alábbiakban ismertetjük:
getInputFormat ():
Ezt a módszert Pig hívja meg a betöltő által használt InputFormat megszerzéséhez. Az InputFormat módszereit Pig ugyanúgy hívja meg, mint Hadoop egy MapReduce Java programban. Ha az InputFormat csomagolt Hadoop, akkor a megvalósításnak az új API-alapúat kell használnia az org.apache.hadoop.mapreduce alatt. Ha ez egy egyedi InputFormat, akkor jobb, ha az új API-t használja az org.apache.hadoop.mapreduce fájlban.
setLocation ():
Ezt a módszert Pig hívja meg, hogy közölje a betöltés helyét a betöltővel. A betöltőnek ezt a módszert kell használnia, hogy ugyanazokat az információkat továbbítsa az InputFormat maghoz. Ezt a módszert disznó többször is hívja.
preparToRead ():
Ebben a módszerben a LoadFunc által biztosított InputFormat fájlhoz kapcsolódó RecordReader továbbításra kerül a LoadFunc-nak. A RecordReadert mostantól a getNext () implementációja felhasználhatja arra, hogy az adatrekordot képviselő duplát visszaküldje Pignek.
getNext ():
A getNext () jelentése nem változott, és a Pig futásideje hívja meg az adatok következő duplájának megszerzésére. Ebben a módszerben a megvalósításnak az alapul szolgáló RecordReadert kell használnia, és a visszatéréshez fel kell készítenie a duplát.
Alapértelmezett megvalósítások a LoadFunc-ben:
Vegye figyelembe, hogy a LoadFunc alapértelmezett megvalósításait csak szükség esetén szabad felülírni.
setUdfContextSignature ():
Ezt a módszert Pig hívja meg, mind az elülső, mind a hátsó végén, hogy egyedi aláírást adjon át a betöltőnek. Az aláírás felhasználható bármilyen információ tárolására az UDFContextben, amelyet a betöltőnek tárolnia kell a különböző metódusok között az elülső és a hátsó végén. Felhasználási eset az, hogy a számára feltöltött RequiredFieldList fájlt a LoadPushDown.pushProjection (RequiredFieldList) fájlban tárolja, hogy a háttérben használhassa, mielőtt visszaadná a sorrendeket a getNext () fájlba. A LoadFunc alapértelmezett megvalósításának üres törzse van. Ezt a módszert más módszerek előtt hívják meg.
relatívToAbsolutePath ():
A Pig futásideje ezt a módszert hívja meg, hogy a Loader egy relatív terhelési helyet abszolút helyre konvertálhasson. A LoadFunc által biztosított alapértelmezett megvalósítás kezeli ezt a FileSystem helyszíneken. Ha a betöltési forrás valami más, akkor a betöltő implementációja ezt felülírhatja.
A példában a betöltő implementációja szöveges adatok betöltője, sorhatárolóval:
’És‘ ’alapértelmezett mezőhatárolóként, hasonlóan a Pig Pigtor jelenlegi PigStorage betöltőjéhez. A megvalósítás egy meglévő, Hadoop által támogatott Inputformatot - TextInputFormat - használ alapul szolgáló InputFormatként.
public class SimpleTextLoader kiterjeszti a LoadFunc {protected RecordReader in = null privát byte fieldDel = '' private ArrayList mProtoTuple = null privát TupleFactory mTupleFactory = TupleFactory.getInstance () private static final int BUFFER_SIZE = 1024 public SimpleTextLoader * ( Sertésrakodó, amely meghatározott karaktert használ mezőelválasztóként. * * @param határoló * a mezők elválasztására használt egybájtos karakter. * ('' az alapértelmezett.) * / public SimpleTextLoader (String elválasztó) {this () if (határoló.hossz () == 1) {this.fieldDel = (bájt) delimiter.charAt (0)} else if ( elhatároló.hossz ()> 1 & & elhatároló.charAt (0) == '') {kapcsoló (elhatároló.charAt (1)) {eset 't': this.fieldDel = (byte) '' törés 'x' : fieldDel = Integer.valueOf (határoló.substring (2), 16) .byteValue () töréses eset „u”: this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () törés alapértelmezett: dobja új RuntimeException ('Ismeretlen határoló' + elválasztó)}} else {dobjon új RuntimeException-t ('A PigStorage elválasztónak egyetlen karakternek kell lennie')}} @ Nyilvános Tuple getNext () nyilvános felülbírálása IOException-t dob {try {boolean notDone = in.nextKeyValue () if (notDone) {return null} Szöveges érték = (Szöveg) in.getCurrentValue () byte [] buf = value.getBytes () int len = value.getLength () int start = 0 for (int i = 0 iVan egy kérdésünk? Kérjük, említse meg a megjegyzések részben, és mi kapcsolatba lépünk Önnel.
Kapcsolódó hozzászólások:
rendezési függvény c ++