Apache Pig UDF: Partea 3 - Funcții de stocare



Această postare descrie despre Apache Pig UDF - Funcțiile magazinului. (Apache Pig UDF: Partea 3). Aruncați o privire la funcțiile magazinului Apache Pig UDF.

Clasa abstractă StoreFunc are principalele metode de stocare a datelor și pentru majoritatea cazurilor de utilizare ar trebui să fie suficientă extinderea acestora. Există o interfață opțională care poate fi implementată pentru a obține funcționalități extinse:





StoreMetadata

Această interfață are metode de interacțiune cu sistemele de metadate pentru a stoca schema și statisticile. Această interfață este opțională și trebuie implementată numai dacă metadatele trebuie stocate.

java copie profundă vs copie superficială

Metodele care trebuie înlocuite în StoreFunc sunt explicate mai jos:



  • getOutputFormat ():

    Această metodă va fi apelată de Pig pentru a obține OutputFormat folosit de Storer. Metodele din OutputFormat vor fi apelate de Pig în același mod și în același context ca și Hadoop într-un program Java map-reduce. Dacă OutputFormat este un pachet Hadoop, implementarea ar trebui să utilizeze noul API bazat pe org.apache.hadoop.mapreduce. Dacă este un OutputFormat personalizat, ar trebui să fie implementat folosind noul API sub org.apache.hadoop.mapreduce. Metoda checkOutputSpecs () a OutputFormat va fi apelată de porc pentru a verifica locația de ieșire din față. Această metodă va fi, de asemenea, apelată ca parte a secvenței de apel Hadoop la lansarea jobului. Deci implementările ar trebui să se asigure că această metodă poate fi numită de mai multe ori fără efecte secundare inconsistente.

  • setStoreLocation ():

    Această metodă este apelată de Pig pentru a comunica locația magazinului către stocator. Stocatorul ar trebui să utilizeze această metodă pentru a comunica aceleași informații către OutputFormat subiacent. Această metodă este numită de mai multe ori de către Pig. Implementările ar trebui să ia act de faptul că această metodă este numită de mai multe ori și ar trebui să se asigure că nu există efecte secundare inconsistente din cauza apelurilor multiple.

  • prepareToWrite ():

    În noul API, scrierea datelor se face prin OutputFormat furnizat de StoreFunc. În prepareToWrite () RecordWriter asociat cu OutputFormat furnizat de StoreFunc este trecut la StoreFunc. RecordWriter poate fi apoi utilizat de implementarea în putNext () pentru a scrie un tuplu reprezentând o înregistrare a datelor într-un mod așteptat de RecordWriter.

  • putNext ():

    Înțelesul putNext () nu s-a schimbat și este chemat de Runtime Pig să scrie următorul tuplu de date - în noul API, aceasta este metoda în care implementarea va folosi RecordWriter-ul de bază pentru a scrie tuplul.

Implementări implicite în StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Această metodă va fi apelată de Pig atât în ​​partea din față, cât și din partea din spate pentru a transmite o semnătură unică Storerului. Semnătura poate fi utilizată pentru a stoca orice informații în UDFContext pe care Stocatorul trebuie să le stocheze între diverse invocații de metodă din partea frontală și cea din spate. Implementarea implicită în StoreFunc are un corp gol. Această metodă va fi apelată înainte de orice alte metode.

  • relToAbsPathForStoreLocation ():

    Runtime-ul porcului va apela această metodă pentru a permite magazinului să convertească o locație relativă a magazinului într-o locație absolută. O implementare este furnizată în StoreFunc care gestionează acest lucru pentru locațiile bazate pe FileSystem.

  • checkSchema ():

    O funcție Store ar trebui să implementeze această funcție pentru a verifica dacă o schemă dată care descrie datele care trebuie scrise este acceptabilă pentru aceasta. Implementarea implicită în StoreFunc are un corp gol. Această metodă va fi apelată înainte de orice apeluri către setStoreLocation ().

Exemplu de implementare:

Implementarea stocatorului din exemplu este un stocator pentru date text cu delimitator de linie ca „
‘Și‘ ‘ca delimitator de câmp implicit (care poate fi anulat prin trecerea unui delimitator de câmp diferit în constructor) - acest lucru este similar cu stocatorul curent PigStorage din Pig. Implementarea utilizează un OutputFormat - TextOutputFormat existent suportat de Hadoop ca OutputFormat de bază.

public class SimpleTextStorer extinde StoreFunc {protected RecordWriter writer = null private byte fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () break case ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () implicit break: aruncă RuntimeException nou (' Delimitator necunoscut '+ delimitator)}} else {aruncă RuntimeException nou (' Delimiterul PigStorage trebuie să fie caracter unic ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) aruncă IOException {int sz = f.size () pentru (int i = 0 i

Ai o întrebare pentru noi? Vă rugăm să le menționați în secțiunea de comentarii și vă vom răspunde.

Postări asemănatoare:



Apache Pig UDF: Partea 2
Apache Pig UDF: Partea 1

java data nouă din șir