Apache Pig UDF: Část 3 - Funkce obchodu



Tento příspěvek popisuje informace o Apache Pig UDF - funkce obchodu. (Apache Pig UDF: Část 3). Podívejte se na funkce obchodu Apache Pig UDF.

jak používat charat v java

StoreFunc abstraktní třída má hlavní metody pro ukládání dat a pro většinu případů použití by mělo stačit k jejímu rozšíření. K dispozici je volitelné rozhraní, které lze implementovat pro dosažení rozšířené funkce:





StoreMetadata

Toto rozhraní má metody interakce se systémy metadat pro ukládání schémat a statistik. Toto rozhraní je volitelné a mělo by být implementováno pouze v případě, že je třeba ukládat metadata.

Níže jsou vysvětleny metody, které je třeba v StoreFunc přepsat:



  • getOutputFormat ():

    Tuto metodu zavolá Pig, aby získal OutputFormat použitý Storerem. Metody ve OutputFormatu bude Pig voláno stejným způsobem a ve stejném kontextu jako Hadoop v programu Java s redukcí mapy. Pokud je OutputFormat zabalený v Hadoopu, měla by implementace použít nové založené na API pod org.apache.hadoop.mapreduce. Pokud se jedná o vlastní OutputFormat, měl by být implementován pomocí nového API pod org.apache.hadoop.mapreduce. Metoda checkOutputSpecs () nástroje OutputFormat bude volána prase, aby zkontrolovala umístění výstupu předem. Tato metoda bude také volána jako součást sekvence volání Hadoop při spuštění úlohy. Implementace by tedy měly zajistit, aby tato metoda mohla být volána vícekrát bez nekonzistentních vedlejších účinků.

  • setStoreLocation ():

    Tuto metodu volá Pig, aby sdělil umístění úložiště skladovateli. Skladovatel by měl tuto metodu použít ke komunikaci stejných informací s podkladovým OutputFormat. Tato metoda se nazývá Pig několikrát. Implementace by měly vzít na vědomí, že tato metoda se nazývá vícekrát, a měla by zajistit, že kvůli vícenásobným voláním neexistují žádné nekonzistentní vedlejší účinky.

  • prepareToWrite ():

    V novém API se zápis dat provádí pomocí OutputFormat poskytovaného StoreFunc. V PreparToWrite () je RecordWriter přidružený k OutputFormat poskytnutému StoreFunc předán StoreFunc. RecordWriter pak může být použita implementací v putNext () k zápisu n-tice představující záznam dat způsobem očekávaným RecordWriterem.

  • putNext ():

    Význam putNext () se nezměnil a je volán modulem Pig runtime pro zápis další n-tice dat - v novém API je to metoda, při které implementace použije základní RecordWriter k zápisu n-tice.

Výchozí implementace v StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Tato metoda bude volána Pigem v předním i zadním konci, aby se předal jedinečný podpis Storeru. Podpis lze použít k uložení jakýchkoli informací do UDFContext, které Storer potřebuje k ukládání mezi různými vyvoláními metod v rozhraní front-end a back-end. Výchozí implementace v StoreFunc má prázdné tělo. Tato metoda bude volána před jinými metodami.

  • relToAbsPathForStoreLocation ():

    Pig runtime zavolá tuto metodu, aby Storeru umožnilo převést relativní umístění úložiště na absolutní umístění. Implementace je poskytována v StoreFunc, která to zpracovává pro umístění založená na FileSystem.

  • checkSchema ():

    Funkce Store by měla implementovat tuto funkci, aby zkontrolovala, zda je pro ni přijatelné dané schéma popisující data, která mají být zapsána. Výchozí implementace v StoreFunc má prázdné tělo. Tato metoda bude volána před všemi voláními setStoreLocation ().

Příklad implementace:

Implementace úložiště v příkladu je úložiště textových dat s oddělovačem řádků jako „
„A“ „jako výchozí oddělovač polí (který lze přepsat předáním jiného oddělovače polí v konstruktoru) - je to podobné jako u aktuálního úložiště PigStorage v Pig. Implementace používá jako výchozí OutputFormat existující Hadoop podporovaný OutputFormat - TextOutputFormat.

public class SimpleTextStorer extends 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 () break default: throw new RuntimeException (' Unknown delimiter '+ delimiter)}} else {throw new RuntimeException (' PigStorage delimeter must be a a jeden znak ')}} ByteArrayOutputStream mOut = nový ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) vyvolá IOException {int sz = f.size () pro (int i = 0 i

Máte na nás dotaz? Uveďte je prosím v sekci komentáře a my se vám ozveme.

Související příspěvky:



Apache Pig UDF: Část 2
Apache Pig UDF: Část 1