Apache Pig UDF: Część 3 - Funkcje sklepu



Ten post zawiera opis funkcji Apache Pig UDF - Funkcje sklepu. (Apache Pig UDF: Część 3). Zapoznaj się z funkcjami sklepu Apache Pig UDF.

Klasa abstrakcyjna StoreFunc posiada główne metody przechowywania danych iw większości przypadków wystarczy je rozszerzyć. Istnieje opcjonalny interfejs, który można zaimplementować w celu uzyskania rozszerzonej funkcjonalności:





StoreMetadata

Ten interfejs zawiera metody interakcji z systemami metadanych w celu przechowywania schematów i statystyk. Ten interfejs jest opcjonalny i powinien być wdrażany tylko wtedy, gdy metadane muszą być przechowywane.

Metody, które należy zastąpić w StoreFunc, są wyjaśnione poniżej:



jak łączyć dane w tabeli
  • getOutputFormat ():

    Ta metoda zostanie wywołana przez Pig w celu pobrania OutputFormat używanego przez Storer. Metody w OutputFormat będą wywoływane przez Pig w ten sam sposób iw tym samym kontekście, co Hadoop w programie Java redukującym mapy. Jeśli OutputFormat jest pakietem Hadoop, implementacja powinna korzystać z nowego interfejsu API opartego na org.apache.hadoop.mapreduce. Jeśli jest to niestandardowy format OutputFormat, należy go zaimplementować przy użyciu nowego interfejsu API pod adresem org.apache.hadoop.mapreduce. Metoda checkOutputSpecs () obiektu OutputFormat zostanie wywołana przez pig w celu sprawdzenia lokalizacji wyjściowej z góry. Ta metoda będzie również wywoływana jako część sekwencji wywołań Hadoop podczas uruchamiania zadania. Dlatego implementacje powinny zapewniać możliwość wielokrotnego wywoływania tej metody bez niespójnych skutków ubocznych.

  • setStoreLocation ():

    Ta metoda jest wywoływana przez Pig w celu poinformowania przechowującego o lokalizacji sklepu. Przechowujący powinien używać tej metody do przekazywania tych samych informacji do bazowego OutputFormat. Ta metoda jest wielokrotnie wywoływana przez Pig. Implementacje powinny zwrócić uwagę, że ta metoda jest wywoływana wiele razy i powinna zapewnić brak niespójnych skutków ubocznych z powodu wielu wywołań.

  • preparatToWrite ():

    W nowym interfejsie API dane są zapisywane za pomocą OutputFormat udostępnionego przez StoreFunc. W przypadku applyToWrite () RecordWriter skojarzony z OutputFormat dostarczonym przez StoreFunc jest przekazywany do StoreFunc. RecordWriter może być następnie użyty przez implementację metody putNext () do napisania krotki reprezentującej rekord danych w sposób oczekiwany przez RecordWriter.

  • putNext ():

    Znaczenie putNext () nie uległo zmianie i jest wywoływane przez środowisko uruchomieniowe Pig, aby zapisać następną krotkę danych - w nowym API jest to metoda, w której implementacja użyje bazowego RecordWriter do wypisania krotki.

Domyślne implementacje w StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Ta metoda zostanie wywołana przez Pig zarówno w interfejsie użytkownika, jak i na zapleczu, aby przekazać unikalny podpis do Storer. Podpis może służyć do przechowywania dowolnych informacji w UDFContext, które przechowujący musi przechowywać między różnymi wywołaniami metod w interfejsie użytkownika i zapleczu. Domyślna implementacja w StoreFunc ma pustą treść. Ta metoda zostanie wywołana przed innymi metodami.

  • relToAbsPathForStoreLocation ():

    Środowisko uruchomieniowe świń wywoła tę metodę, aby umożliwić Storer konwersję względnej lokalizacji magazynu na lokalizację bezwzględną. W StoreFunc dostępna jest implementacja, która obsługuje to dla lokalizacji opartych na FileSystem.

  • checkSchema ():

    Funkcja Store powinna implementować tę funkcję, aby sprawdzić, czy dany schemat opisujący dane do zapisania jest dla niej akceptowalny. Domyślna implementacja w StoreFunc ma pustą treść. Ta metoda zostanie wywołana przed jakimkolwiek wywołaniem metody setStoreLocation ().

Przykładowa implementacja:

Implementacja magazynu w tym przykładzie jest magazynem dla danych tekstowych z ogranicznikiem linii jako „
„I„ ”jako domyślny ogranicznik pola (który można zastąpić, przekazując inny ogranicznik pola w konstruktorze) - jest to podobne do obecnego magazynu PigStorage w Pig. Implementacja używa istniejącego OutputFormat obsługiwanego przez Hadoop - TextOutputFormat jako bazowego OutputFormat.

public class SimpleTextStorer rozszerza 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 (ogranicznik ciągu) {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 (' Separator PigStorage musi być pojedynczy znak ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) rzuca IOException {int sz = f.size () for (int i = 0 i

Masz do nas pytanie? Wspomnij o nich w sekcji komentarzy, a my skontaktujemy się z Tobą.

Powiązane posty:



Apache Pig UDF: Część 2
Apache Pig UDF: Część 1