Apache Pig UDF: 3. osa - salvestusfunktsioonid



Selles postituses kirjeldatakse Apache Pig UDF - poefunktsioone. (Apache Pig UDF: 3. osa). Heitke pilk Apache Pig UDF-i poefunktsioonidele.

StoreFunc abstraktsel klassil on peamised meetodid andmete salvestamiseks ja enamikul kasutusjuhtumitel peaks piisama nende laiendamisest. Laiendatud funktsionaalsuse saavutamiseks on valikuline liides:





StoreMetadata

Selles liideses on skeemide ja statistika salvestamiseks meetodeid metaandmesüsteemidega suhtlemiseks. See liides on valikuline ja seda tuleks rakendada ainult siis, kui metaandmeid on vaja salvestada.

Meetodeid, mis tuleb StoreFuncis tühistada, on selgitatud allpool:



  • getOutputFormat ():

    Selle meetodi kutsub Pig, et saada salvestaja kasutatav OutputFormat. Pig kutsub OutputFormati meetodid välja samal viisil ja samas kontekstis nagu Hadoop kaardi vähendamise Java-programmis. Kui OutputFormat on pakendatud Hadoop, peaks rakendus kasutama uut API-põhist API-d org.apache.hadoop.mapreduce all. Kui see on kohandatud OutputFormat, tuleks see rakendada, kasutades uut API-d org.apache.hadoop.mapreduce all. Väljundi asukoha kontrollimiseks siga kutsub OutputFormati meetodit checkOutputSpecs (). Seda meetodit kutsutakse ka Hadoopi kõnejada osana, kui töö käivitatakse. Seega peaksid rakendused tagama, et seda meetodit saab kutsuda mitu korda ilma vastuoluliste kõrvaltoimeteta.

  • setStoreLocation ():

    Seda meetodit kutsub Pig, et poe asukoht hoiustajale teada anda. Hoidja peaks seda meetodit kasutama sama teabe edastamiseks aluseks olevale OutputFormatile. Seda meetodit nimetab Pig mitu korda. Rakendused peaksid arvestama, et seda meetodit nimetatakse mitu korda ja see peaks tagama, et mitme kõne tõttu ei oleks vastuolulisi kõrvaltoimeid.

  • PreparToWrite ():

    Uues API-s toimub andmete kirjutamine OutFormati kaudu, mille pakub StoreFunc. Rakenduses preparToWrite () edastatakse StoreFunci pakutava OutputFormatiga seotud RecordWriter StoreFuncile. Seejärel saab rakenduses putNext () RecordWriterit kasutada andmestikku esindava dupleksi kirjutamiseks viisil, mida RecordWriter eeldab.

  • putNext ():

    PutNext () tähendus ei ole muutunud ja Pig Runtime kutsub üles kirjutama järgmise andmepaki - uues API-s on see meetod, kus juurutus kasutab Tuple välja kirjutamiseks aluseks olevat RecordWriterit.

Vaikimisi rakendused StoreFuncis:

  • setStoreFuncUDFContextSignature ():

    Seda meetodit kutsub Pig nii eesmises kui ka tagumises otsas, et edastada Hoidjale ainulaadne allkiri. Allkirja saab kasutada mis tahes teabe salvestamiseks UDFContextisse, mida ladustaja peab erinevate meetodite esilekutsumiste ja esiosa vahel salvestama. StoreFunci vaikerakendusel on tühi keha. Seda meetodit kutsutakse enne muid meetodeid.

  • relToAbsPathForStoreLocation ():

    Seadme käitusaeg kasutab seda meetodit, et võimaldada salvestajal teisendada suhteline poe asukoht absoluutseks. StoreFunc pakub rakendust, mis haldab seda FileSystemi põhiste asukohtade jaoks.

  • checkSchema ():

    Funktsioon Store peaks selle funktsiooni rakendama, et kontrollida, kas antud skeem, mis kirjeldab kirjutatavaid andmeid, on talle vastuvõetav. StoreFunci vaikerakendusel on tühi keha. Seda meetodit kutsutakse enne kõnesid setStoreLocation ().

Rakenduse näide:

Näite salvestusrakendus on tekstiandmete salvestaja rea ​​eraldajaga ‘
Vaikevälja eraldajana ‘ja’ ’(mida saab tühistada, kui konstruktoris läbida erinev väli eraldaja) - see on sarnane Pigi praeguse PigStorage'i salvestajaga. Rakendus kasutab aluseks oleva OutputFormatina olemasolevat Hadoopi toetatud OutputFormat - TextOutputFormat.

public class SimpleTextStorer laiendab StoreFunc {kaitstud RecordWriteri kirjutaja = null privaatbaiti fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (eraldaja.length () == 1) {this.fieldDel = (bait) delimiter.charAt (0)} else if (eraldaja.length ()> 1delimiter.charAt (0) == '') {switch ( eraldaja.charAt (1)) {juhtum 't': see.väliDel = (bait) '' murdejuhtum 'x': fieldDel = Integer.valueOf (eraldaja.substring (2), 16). byteValue () murde juhtum ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () murde vaikeväärtus: viska uus RuntimeException (' Tundmatu eraldaja '+ eraldaja)}} else {dob uus RuntimeException (' PigStorage'i eraldaja peab olema üks märk ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) viskab IOException {int sz = f.size () jaoks (int i = 0 i

Kas teil on meile küsimus? Palun mainige neid kommentaaride jaotises ja me võtame teiega ühendust.

Seonduvad postitused:



Apache Pig UDF: 2. osa
Apache Pig UDF: 1. osa