Apache Pig UDF: Parte 3 - Funções de armazenamento



Esta postagem descreve sobre Apache Pig UDF - Funções de armazenamento. (Apache Pig UDF: Parte 3). Dê uma olhada nas funções de armazenamento do Apache Pig UDF.

A classe abstrata StoreFunc possui os principais métodos para armazenar dados e, para a maioria dos casos de uso, deve bastar estendê-los. Há uma interface opcional que pode ser implementada para obter funcionalidade estendida:





StoreMetadata

Essa interface possui métodos para interagir com sistemas de metadados para armazenar esquemas e estatísticas. Essa interface é opcional e deve ser implementada apenas se os metadados precisarem ser armazenados.

Os métodos que precisam ser substituídos em StoreFunc são explicados abaixo:



  • getOutputFormat ():

    Este método será chamado pelo Pig para obter o OutputFormat usado pelo Armazenador. Os métodos no OutputFormat serão chamados pelo Pig da mesma maneira e no mesmo contexto que pelo Hadoop em um programa Java de redução de mapa. Se o OutputFormat for um pacote Hadoop, a implementação deve usar a nova API baseada em org.apache.hadoop.mapreduce. Se for um OutputFormat personalizado, ele deve ser implementado usando a nova API em org.apache.hadoop.mapreduce. O método checkOutputSpecs () de OutputFormat será chamado por pig para verificar o local de saída antecipadamente. Este método também será chamado como parte da sequência de chamadas do Hadoop quando o trabalho for iniciado. Portanto, as implementações devem garantir que esse método possa ser chamado várias vezes sem efeitos colaterais inconsistentes.

  • setStoreLocation ():

    Este método é chamado pelo Pig para comunicar a localização da loja ao armazenador. O armazenador deve usar esse método para comunicar as mesmas informações ao OutputFormat subjacente. Este método é chamado várias vezes pelo Pig. As implementações devem observar que esse método é chamado várias vezes e deve garantir que não haja efeitos colaterais inconsistentes devido às várias chamadas.

  • prepareToWrite ():

    Na nova API, a gravação dos dados é feita por meio do OutputFormat fornecido pelo StoreFunc. Em prepareToWrite (), o RecordWriter associado ao OutputFormat fornecido pelo StoreFunc é passado para o StoreFunc. O RecordWriter pode então ser usado pela implementação em putNext () para escrever uma tupla representando um registro de dados da maneira esperada pelo RecordWriter.

  • putNext ():

    O significado de putNext () não mudou e é chamado pelo tempo de execução do Pig para gravar a próxima tupla de dados - na nova API, este é o método em que a implementação usará o RecordWriter subjacente para gravar a Tupla.

Implementações padrão em StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Este método será chamado pelo Pig no front end e no back end para passar uma assinatura exclusiva para o Armazenador. A assinatura pode ser usada para armazenar qualquer informação no UDFContext que o Armazenador precise armazenar entre várias invocações de método no front end e back end. A implementação padrão em StoreFunc possui um corpo vazio. Este método será chamado antes de qualquer outro método.

  • relToAbsPathForStoreLocation ():

    O tempo de execução do Pig chamará esse método para permitir que o Armazenador converta um local de armazenamento relativo em um local absoluto. Uma implementação é fornecida em StoreFunc que lida com isso para locais baseados em FileSystem.

  • checkSchema ():

    Uma função Store deve implementar essa função para verificar se um determinado esquema que descreve os dados a serem gravados é aceitável para ela. A implementação padrão em StoreFunc possui um corpo vazio. Este método será chamado antes de qualquer chamada para setStoreLocation ().

Exemplo de implementação:

A implementação do armazenador no exemplo é um armazenador para dados de texto com delimitador de linha como ‘
‘E‘ ‘como delimitador de campo padrão (que pode ser substituído passando um delimitador de campo diferente no construtor) - isso é semelhante ao armazenador PigStorage atual no Pig. A implementação usa um OutputFormat - TextOutputFormat compatível com Hadoop existente como o OutputFormat subjacente.

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 delimitador) {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 deve ser caractere único ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) lança IOException {int sz = f.size () para (int i = 0 i

Tem alguma questão para nós? Mencione-os na seção de comentários e entraremos em contato com você.

redondo duplo para int java

Postagens relacionadas:



Apache Pig UDF: Parte 2
Apache Pig UDF: Parte 1