Apache Pig UDF: Parte 2 - Funciones de carga



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

La publicación de hoy trata sobre las funciones de carga en Apache Pig. Esta es la secuela del Primer comentario que cubría funciones de UDF como Eval, Filter y Aggregate. Refiérase a ellos para obtener más información sobre otras funciones de Pig UDF.





que es hover en css

La función de carga de Pig se basa en InputFormat de Hadoop, la clase que usa Hadoop para leer datos. InputFormat tiene dos propósitos: determina cómo se fragmentará la entrada entre las tareas del mapa y proporciona un RecordReader que da como resultado pares clave-valor como entrada para esas tareas del mapa. La clase base para la función de carga es LoadFunc.

Función de carga - Clasificación:

La clase abstracta LoadFunc tiene tres métodos principales para cargar datos y, en la mayoría de los casos de uso, sería suficiente ampliarla. Hay otras tres interfaces opcionales que se pueden implementar para lograr una funcionalidad extendida:



  • LoadMetadata:

LoadMetadata tiene métodos para lidiar con los metadatos. La mayoría de ejecuciones de cargadores no necesitan implementar esto a menos que interactúen con un sistema de metadatos. El método getSchema () en esta interfaz ofrece una forma para que las implementaciones del cargador se comuniquen sobre el esquema de los datos con Pig. Si una implementación de cargador devuelve datos compuestos por campos de tipos reales, debe proporcionar el esquema que describe los datos devueltos a través del método getSchema (). Los otros métodos tratan con otros tipos de metadatos como claves de partición y estadísticas. Las implementaciones pueden devolver valores de retorno nulos para estos métodos si no son válidos para la otra implementación.

  • LoadPushDown:

LoadPushDown tiene diferentes métodos para enviar operaciones desde el tiempo de ejecución de Pig a las implementaciones del cargador. Actualmente, Pig solo llama al método pushProjection () para comunicarse con el cargador, los campos exactos que se requieren en el script de Pig. La implementación del cargador puede optar por cumplir o no cumplir con la solicitud. Si la implementación del cargador decide cumplir con la solicitud, debe implementar LoadPushDown para mejorar el rendimiento de la consulta.

  • pushProjection ():

Este método informa a LoadFunc, qué campos son obligatorios en el script Pig. Por lo tanto, permite que LoadFunc mejore el rendimiento cargando solo los campos necesarios. pushProjection () toma un 'requiredFieldList'. 'requiredFieldList' es de solo lectura y LoadFunc no puede cambiarlo. 'RequiredFieldList' incluye una lista de 'requiredField', donde cada 'requiredField' indica un campo requerido por la secuencia de comandos de Pig y se compone de índice, alias, tipo y subcampos. Pig usa el índice de columna requiredField.index para comunicarse con LoadFunc sobre los campos requeridos por el script de Pig. Si el campo requerido es un mapa, Pig pasará 'requiredField.subFields' que contiene una lista de claves requeridas por los scripts de Pig para el mapa.



cómo usar el navegador sqlite
  • LoadCaster:

LoadCaster tiene técnicas para convertir matrices de bytes en tipos específicos. Una implementación de cargador debe implementar esto cuando se necesita admitir conversiones implícitas o explícitas de campos DataByteArray a otros tipos.

La clase abstracta LoadFunc es la clase principal que se extiende para implementar un cargador. Los métodos que deben anularse se explican a continuación:

  • getInputFormat ():

    Pig llama a este método para que el cargador utilice InputFormat. Pig llama a los métodos en InputFormat de la misma manera que Hadoop en un programa Java MapReduce. Si InputFormat es un paquete de Hadoop, la implementación debe usar la nueva API basada en org.apache.hadoop.mapreduce. Si es un InputFormat personalizado, es mejor implementarlo usando la nueva API en org.apache.hadoop.mapreduce.

  • escoger localización():

    Pig llama a este método para comunicar la ubicación de la carga al cargador. El cargador debe utilizar este método para comunicar la misma información al InputFormat principal. Este método es llamado varias veces por cerdo.

  • prepareToRead():

    En este método, el RecordReader relacionado con el InputFormat proporcionado por LoadFunc se pasa al LoadFunc. La implementación en getNext () ahora puede usar RecordReader para devolver una tupla que representa un registro de datos a Pig.

  • getNext ():

    El significado de getNext () no ha cambiado y Pig runtime lo llama para adquirir la siguiente tupla en los datos. En este método, la implementación debe usar el RecordReader subyacente y construir la tupla para devolver.

Implementaciones predeterminadas en LoadFunc:

Tenga en cuenta que las implementaciones predeterminadas en LoadFunc deben anularse solo cuando sea necesario.

  • setUdfContextSignature ():

    Pig llamará a este método, tanto en la parte frontal como en la parte posterior para pasar una firma única al cargador. La firma se puede utilizar para almacenar cualquier información en el UDFContext que el Loader necesita almacenar entre varias invocaciones de métodos en el front-end y el back-end. Un caso de uso es almacenar RequiredFieldList que se le pasa en LoadPushDown.pushProjection (RequiredFieldList) para usar en el back-end antes de devolver tuplas en getNext (). La implementación predeterminada en LoadFunc tiene un cuerpo vacío. Este método se llamará antes que otros métodos.

  • relativoToAbsolutePath ():

    Pig runtime llamará a este método para permitir que Loader convierta una ubicación de carga relativa en una ubicación absoluta. La implementación predeterminada proporcionada en LoadFunc maneja esto para las ubicaciones de FileSystem. Si la fuente de carga es otra, la implementación del cargador puede optar por anular esto.

La implementación del cargador en el ejemplo es un cargador de datos de texto con un delimitador de línea como '
'Y' como delimitador de campo predeterminado similar al cargador PigStorage actual en Pig. La implementación utiliza un Inputformat existente compatible con Hadoop, TextInputFormat, como InputFormat subyacente.

que es hibernar en java
public class SimpleTextLoader extiende LoadFunc {protected RecordReader in = null byte privado fieldDel = '' private ArrayList mProtoTuple = null private TupleFactory mTupleFactory = TupleFactory.getInstance () privado estático final int BUFFER_SIZE = 1024 público SimpleTextLoader () {} / ** Cargador de cerdos que utiliza un carácter especificado como delimitador de campo. * * @param delimiter * el carácter de un solo byte que se utiliza para separar campos. * ('' es el valor predeterminado.) * / public SimpleTextLoader (String delimiter) {this () if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if ( delimiter.length ()> 1 & & delimiter.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: lanzar nuevo RuntimeException ('Delimitador desconocido' + delimitador)}} else {throw new RuntimeException ('PigStorage delimeter debe ser un solo carácter')}} @Override public Tuple getNext () lanza IOException {try {boolean notDone = in.nextKeyValue () (notDone) {return null} Valor de texto = (Texto) in.getCurrentValue () byte [] buf = value.getBytes () int len ​​= value.getLength () int start = 0 for (int i = 0 iTienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos pondremos en contacto con usted. 

Artículos Relacionados: