Apache Pig UDF: Del 3 - Butiksfunktioner



Det här inlägget beskriver om Apache Pig UDF - Store-funktioner. (Apache Pig UDF: Del 3). Ta en titt på butiksfunktionerna för Apache Pig UDF.

hur man vänder en strängpython

StoreFunc-abstraktklassen har de viktigaste metoderna för lagring av data och för de flesta användningsfall bör det vara tillräckligt att utöka den. Det finns ett valfritt gränssnitt som kan implementeras för att uppnå utökad funktionalitet:





StoreMetadata

Detta gränssnitt har metoder för att interagera med metadatasystem för att lagra schema och statistik. Detta gränssnitt är valfritt och bör endast implementeras om metadata måste lagras.

Metoderna som måste åsidosättas i StoreFunc förklaras nedan:



  • getOutputFormat ():

    Denna metod kommer att anropas av Pig för att få OutputFormat som används av Storer. Metoderna i OutputFormat kommer att anropas av Pig på samma sätt och i samma sammanhang som av Hadoop i ett kartreducerande Java-program. Om OutputFormat är en Hadoop-packad bör implementeringen använda den nya API-baserade under org.apache.hadoop.mapreduce. Om det är en anpassad OutputFormat bör den implementeras med det nya API: et under org.apache.hadoop.mapreduce. Metoden checkOutputSpecs () i OutputFormat kommer att anropas av gris för att kontrollera utgångsläget framåt. Denna metod kommer också att anropas som en del av Hadoop-samtalsekvensen när jobbet startas. Så implementeringar bör säkerställa att denna metod kan anropas flera gånger utan inkonsekventa biverkningar.

  • setStoreLocation ():

    Denna metod kallas av Pig för att kommunicera butiksplatsen till lagraren. Lagraren ska använda denna metod för att kommunicera samma information till den underliggande OutputFormat. Denna metod kallas Pig flera gånger. Implementationer bör notera att denna metod kallas flera gånger och bör säkerställa att det inte finns några inkonsekventa biverkningar på grund av flera samtal.

  • prepareToWrite ():

    I det nya API: et skrivs data genom OutputFormat som tillhandahålls av StoreFunc. I preparToWrite () skickas RecordWriter som är associerad med OutputFormat från StoreFunc till StoreFunc. RecordWriter kan sedan användas av implementeringen i putNext () för att skriva en tupel som representerar en dataregistrering på ett sätt som RecordWriter förväntar sig.

  • putNext ():

    Betydelsen av putNext () har inte ändrats och kallas av Pig runtime för att skriva nästa tuple med data - i det nya API: et är detta metoden där implementeringen kommer att använda den underliggande RecordWriter för att skriva ut Tuple.

Standardimplementeringar i StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Denna metod kommer att kallas av Pig både i fram- och bakänden för att skicka en unik signatur till lagraren. Signaturen kan användas för att lagra all information i UDFContext som lagraren behöver lagra mellan olika metodinfordringar i frontend och backend. Standardimplementeringen i StoreFunc har en tom kropp. Denna metod kommer att anropas före andra metoder.

  • relToAbsPathForStoreLocation ():

    Pig runtime kommer att anropa den här metoden för att låta butiksledaren konvertera en relativ butiksplats till en absolut plats. En implementering tillhandahålls i StoreFunc som hanterar detta för FileSystem-baserade platser.

  • checkSchema ():

    En butiksfunktion bör implementera den här funktionen för att kontrollera att ett visst schema som beskriver de data som ska skrivas är acceptabelt för det. Standardimplementeringen i StoreFunc har en tom kropp. Denna metod kommer att anropas före samtal till setStoreLocation ().

Exempel på implementering:

Lagringsimplementeringen i exemplet är en lagrare för textdata med linjeavgränsare som ”
'Och' 'som standardfältavgränsare (som kan åsidosättas genom att skicka en annan fältavgränsare i konstruktorn) - det här liknar den nuvarande PigStorage-lagraren i Pig. Implementeringen använder ett befintligt OutputFormat som stöds av Hadoop - TextOutputFormat som den underliggande OutputFormat.

offentlig klass SimpleTextStorer utökar StoreFunc {skyddad RecordWriter författare = null privat byte fieldDel = '' privat statisk slutlig int BUFFER_SIZE = 1024 privat statisk slutlig Sträng UTF8 = 'UTF-8' offentlig PigStorage () {} offentlig PigStorage (Strängavgränsare) {detta ( ) om (avgränsare.längd () == 1) {detta.fältDel = (byte) avgränsare.charAt (0)} annars om (avgränsare.längd ()> 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 (avgränsare.substring (2)). byteValue () bryta standard: kasta ny RuntimeException (' Okänd avgränsare '+ avgränsare)}} annars {kasta ny RuntimeException (' PigStorage-avgränsare måste enstaka tecken ')}} ByteArrayOutputStream mOut = ny ByteArrayOutputStream (BUFFER_SIZE) @ Override public void putNext (Tuple f) kastar IOException {int sz = f.size () för (int i = 0 i

Har du en fråga till oss? Vänligen nämna dem i kommentarfältet så återkommer vi till dig.

ställa in Java classpath i Linux

Relaterade inlägg:



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