Apache Pig UDF: 2. rész - Betöltési funkciók



Ez a bejegyzés az Apache Pig UDF - Betöltés funkciókról ír le. (Apache Pig UDF: 2. rész). Vessen egy pillantást az Apache Pig UDF betöltési funkcióira.

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 ++