Apache Pig UDF: Parte 3 - Funciones de almacenamiento



Esta publicación describe sobre Apache Pig UDF - Funciones de tienda. (Apache Pig UDF: Parte 3). Eche un vistazo a las funciones de la tienda de Apache Pig UDF.

La clase abstracta StoreFunc tiene los métodos principales para almacenar datos y para la mayoría de los casos de uso debería ser suficiente ampliarla. Existe una interfaz opcional que se puede implementar para lograr una funcionalidad extendida:





StoreMetadata

Esta interfaz tiene métodos para interactuar con los sistemas de metadatos para almacenar esquemas y estadísticas. Esta interfaz es opcional y debe implementarse solo si es necesario almacenar metadatos.

que es ide en java

Los métodos que deben anularse en StoreFunc se explican a continuación:



  • getOutputFormat ():

    Pig llamará a este método para obtener el OutputFormat utilizado por Storer. Pig llamará a los métodos en OutputFormat de la misma manera y en el mismo contexto que Hadoop en un programa Java map-reduce. Si OutputFormat es un paquete de Hadoop, la implementación debe usar la nueva API basada en org.apache.hadoop.mapreduce. Si es un OutputFormat personalizado, debe implementarse usando la nueva API en org.apache.hadoop.mapreduce. Pig llamará al método checkOutputSpecs () de OutputFormat para verificar la ubicación de salida por adelantado. Este método también se llamará como parte de la secuencia de llamada de Hadoop cuando se inicie el trabajo. Por lo tanto, las implementaciones deben garantizar que este método se pueda llamar varias veces sin efectos secundarios inconsistentes.

  • setStoreLocation ():

    Pig llama a este método para comunicar la ubicación de la tienda al almacenista. El almacenador debe usar este método para comunicar la misma información al OutputFormat subyacente. Este método es llamado varias veces por Pig. Las implementaciones deben tener en cuenta que este método se llama varias veces y debe garantizar que no haya efectos secundarios inconsistentes debido a las múltiples llamadas.

  • prepareToWrite():

    En la nueva API, la escritura de los datos se realiza a través del OutputFormat proporcionado por StoreFunc. En prepareToWrite (), el RecordWriter asociado con OutputFormat proporcionado por StoreFunc se pasa a StoreFunc. La implementación en putNext () puede usar RecordWriter para escribir una tupla que represente un registro de datos de la manera esperada por RecordWriter.

  • putNext ():

    El significado de putNext () no ha cambiado y el tiempo de ejecución de Pig lo llama para escribir la siguiente tupla de datos; en la nueva API, este es el método en el que la implementación utilizará el RecordWriter subyacente para escribir la tupla.

Implementaciones predeterminadas en StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Pig llamará a este método tanto en el front end como en el back end para pasar una firma única al Storer. La firma se puede usar para almacenar cualquier información en el UDFContext que el Storer necesita almacenar entre varias invocaciones de métodos en el front-end y el back-end. La implementación predeterminada en StoreFunc tiene un cuerpo vacío. Este método se llamará antes que cualquier otro método.

  • relToAbsPathForStoreLocation ():

    Pig runtime llamará a este método para permitir que Storer convierta una ubicación de tienda relativa en una ubicación absoluta. Se proporciona una implementación en StoreFunc que maneja esto para ubicaciones basadas en FileSystem.

  • checkSchema ():

    Una función de almacenamiento debe implementar esta función para comprobar que un esquema dado que describe los datos que se escribirán es aceptable para ella. La implementación predeterminada en StoreFunc tiene un cuerpo vacío. Este método se llamará antes de cualquier llamada a setStoreLocation ().

Implementación de ejemplo:

La implementación del almacenamiento en el ejemplo es un almacenamiento de datos de texto con un delimitador de línea como '
'Y' como delimitador de campo predeterminado (que se puede anular pasando un delimitador de campo diferente en el constructor); esto es similar al almacenador PigStorage actual en Pig. La implementación utiliza un OutputFormat - TextOutputFormat compatible con Hadoop existente como OutputFormat subyacente.

public class SimpleTextStorer extiende StoreFunc {escritor de RecordWriter protegido = null byte privado 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 delímetro debe ser un carácter único ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) lanza IOException {int sz = f.size () for (int i = 0 i

Tienes una pregunta para nosotros? Por favor, menciónelos en la sección de comentarios y nos comunicaremos con usted.

Artículos Relacionados:



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