Implementar una función UDF de Apache Pig

0
12837

Implementar una UDF de Apache Pig

0. Índice de contenidos.


1. Introducción.

Este tutorial es una continuación del de primeros pasos con Apache Pig donde vamos a ver cómo crear una función UDF (User-Defined Function) de Pig para extender la funcionalidad que viene por defecto.

Las UDFs de Pig se pueden escribir en Java, Javascript, Jython, Python, Ruby y Groovy. Una librería que contiene un gran variedad de UDFs es la de piggybank. Contiene funciones para manejar fechas, operaciones matemáticas, estadísticas, manejo de strings, etc.

Si el tutorial de primeros pasos de Apache Pig se te quedó corto para afrontar algún cálculo más complejo, a continuación vamos a ver uno de los aspectos más interesentes de esta utilidad.

Puedes descargarte el código del tutorial desde mi repositorio de github pinchando aquí.

2. Entorno.

El tutorial se ha realizado con el siguiente entorno:

  • Ubuntu 12.04 64 bits
  • Oracle Java SDK 1.6.0_27
  • Apache Hadoop 2.2.0
  • Apache Pig 0.12.0

3. Crear la UDF

Para crear una User-Defined Function de Pig podemos hacerlo en varios lenguajes. Yo lo haré en Java por lo primeramente crearé un proyecto maven. En el pom.xml añadimos las dependencias de Hadoop y Pig.

Una vez que tenemos la estructura del proyecto Maven creada creamos la clase de la UDF. ésta debe extender la clase org.apache.pig.EvalFunc e implementar el método exec. Este método será el que llame Pig cuando en el script indiquemos la UDF a utilizar.

Voy a utilizar el mismo ejemplo del tutorial de primeros pasos con Apache Pig. En este script sacábamos el valor medio de las medidas tomadas en el fichero. Pig era el encargado de calcular la media y nos devolvía el valor en decimal con varios decimales. Vamos a hacer una función para redondear a 2 decimales.

4. Usar la UDF desde el script de Pig

Ahora vamos a hacer carga de la librería y usar la UDF que acabamos de crear. Antes de nada empaquetamos en un jar la clase con mvn package. En el script hacemos la carga de la librería con el comando register. A continuación creamos un alias para la función DecimalFormat. En la línea 17 cuando se calcula la media del valor se le pasa a la función DecimalFormat que la formateará a 2 decimales devolviendo el resultado que posteriormente se guardará en la salida:

Si lanzamos el script podemos observar el resultado

6. Conclusiones.

Una buena herramienta de software es aquella que te permite multitud de opciones para desarrollar tu código pero es incluso mejor si no está cerrada sino que permite extenderla y enriquecerla con librerías personalizadas. En este tutorial hemos visto cómo crear una UDF para extender la funcionalidad de Apache Pig de una forma muy sencilla.

Si no tienes bastante con la funcionalidad por defecto que viene con la distribución de Apache Pig existen librerías de UDFs ya implementadas con multitud de funciones:

Puedes descargarte el código del tutorial desde mi repositorio de github pinchando aquí.

Espero que te haya sido de ayuda.

Un saludo.

Juan

Dejar respuesta

Please enter your comment!
Please enter your name here