Apache Pig UDF: Del 3 - Butikkfunksjoner



Dette innlegget beskriver Apache Pig UDF - Store Functions. (Apache Pig UDF: Del 3). Ta en titt på butikkfunksjonene til Apache Pig UDF.

StoreFunc abstrakt klasse har hovedmetodene for lagring av data, og for de fleste brukstilfeller bør det være tilstrekkelig å utvide dem. Det er et valgfritt grensesnitt som kan implementeres for å oppnå utvidet funksjonalitet:





StoreMetadata

Dette grensesnittet har metoder for å samhandle med metadatasystemer for å lagre skjema og statistikk. Dette grensesnittet er valgfritt og skal bare implementeres hvis metadata må lagres.

forskjell mellom pass-verdi og pass by reference i java

Metodene som må overstyres i StoreFunc er forklart nedenfor:



  • getOutputFormat ():

    Denne metoden vil bli kalt av Pig for å få OutputFormat brukt av Storer. Metodene i OutputFormat vil bli kalt av Pig på samme måte og i samme sammenheng som av Hadoop i et kartreduserende Java-program. Hvis OutputFormat er en Hadoop-pakket, bør implementeringen bruke den nye API-baserte under org.apache.hadoop.mapreduce. Hvis det er en tilpasset OutputFormat, bør den implementeres ved hjelp av den nye API-en under org.apache.hadoop.mapreduce. CheckOutputSpecs () -metoden til OutputFormat vil bli kalt av gris for å sjekke utgangsplasseringen foran. Denne metoden vil også bli kalt som en del av Hadoop-anropssekvensen når jobben startes. Så implementeringer bør sikre at denne metoden kan kalles flere ganger uten inkonsekvente bivirkninger.

  • setStoreLocation ():

    Denne metoden kalles Pig for å kommunisere butikkplasseringen til lagreren. Lageren bør bruke denne metoden for å kommunisere den samme informasjonen til den underliggende OutputFormat. Denne metoden kalles Pig flere ganger. Implementeringer bør ta oppmerksom på at denne metoden kalles flere ganger og bør sikre at det ikke er inkonsekvente bivirkninger på grunn av flere samtaler.

  • prepareToWrite ():

    I den nye API-en er skriving av dataene via OutputFormat levert av StoreFunc. I prepareToWrite () blir RecordWriter tilknyttet OutputFormat levert av StoreFunc sendt til StoreFunc. RecordWriter kan deretter brukes av implementeringen i putNext () for å skrive en tuple som representerer en dataregistrering på en måte som RecordWriter forventer.

  • putNext ():

    Betydningen av putNext () har ikke endret seg og kalles av Pig runtime for å skrive neste tuple med data - i den nye API-en er dette metoden der implementeringen vil bruke den underliggende RecordWriter til å skrive Tuple ut.

Standardimplementeringer i StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Denne metoden vil bli kalt av Pig både i frontenden og bakenden for å gi en unik signatur til Storer. Signaturen kan brukes til å lagre all informasjon i UDFContext som butikken trenger å lagre mellom forskjellige metodeinnkallelser i frontenden og bakenden. Standardimplementeringen i StoreFunc har en tom kropp. Denne metoden vil bli kalt før andre metoder.

  • relToAbsPathForStoreLocation ():

    Grisekjøring vil kalle denne metoden for å tillate lagrer å konvertere en relativ butikkplass til en absolutt plassering. En implementering er gitt i StoreFunc som håndterer dette for FileSystem-baserte lokasjoner.

  • checkSchema ():

    En butikkfunksjon bør implementere denne funksjonen for å kontrollere at et gitt skjema som beskriver dataene som skal skrives, er akseptabelt for det. Standardimplementeringen i StoreFunc har en tom kropp. Denne metoden vil bli kalt før noen anrop til setStoreLocation ().

Eksempel på implementering:

Lagringsimplementeringen i eksemplet er en lagrer for tekstdata med linjeavgrenser som ‘
‘Og‘ ‘som standard feltavgrenser (som kan overstyres ved å sende en annen feltavgrenser i konstruktøren) - dette ligner på den nåværende PigStorage-lageren i Pig. Implementeringen bruker en eksisterende Hadoop-støttet OutputFormat - TextOutputFormat som den underliggende OutputFormat.

offentlig klasse SimpleTextStorer utvider StoreFunc {beskyttet RecordWriter forfatter = null privat byte fieldDel = '' privat statisk slutt int BUFFER_SIZE = 1024 privat statisk slutt String UTF8 = 'UTF-8' offentlig PigStorage () {} offentlig PigStorage (streng avgrenser) {dette ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} ellers hvis (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 () pause standard: kast ny RuntimeException (' Ukjent skilletegn '+ skilletegn)}} annet {kast ny RuntimeException (' PigStorage-avgrenseren må være en enkelt tegn ')}} ByteArrayOutputStream mOut = nytt ByteArrayOutputStream (BUFFER_SIZE) @ Overstyr offentlig tomrom putNext (Tuple f) kaster IOException {int sz = f.size () for (int i = 0 i

Har du spørsmål til oss? Vennligst nevn dem i kommentarfeltet, så kommer vi tilbake til deg.

Relaterte innlegg:



Apache Pig UDF: Del 2
Apache Pig UDF: Del 1