Ir a contenido principal

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

La primera vez que se registra en developerWorks, se crea un perfil para usted. Información sobre su perfil (nombre, país/región y compañia) estará disponible al público y acompañará cualquiera de sus publicaciones. Puede actualizar su cuenta IBM en cualquier momento.

Toda la información enviada es segura.

  • Cerrar [x]

La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

Toda la información enviada es segura.

  • Cerrar [x]

Análisis de Big Data con Apache Pig

¿Quién dice que los "cerdos" no pueden volar?

Ricardo Barranco Fragoso, IT Specialist for Information Management, IBM Software Group México
Ricardo Barranco Fragoso
Ricardo Barranco Fragoso es IT Specialist para Information Management de IBM Software Group México, desde diciembre de 2010. Entre las principales soluciones en las que está enfocado se encuentran: Master Data Management, Identity Insight y Big Data (InfoSphere BigInsights e InfoSphere Streams); en este rol participa activamente en apoyo de las actividades de preventa. Con más de 7 años de experiencia, antes de su incorporación a IBM, Ricardo ha participado en diversos proyectos de software como Desarrollador Senior, Líder Técnico y Arquitecto Jr. utilizando principalmente tecnología Java Enterprise Edition y Rich Internet Applications. Ricardo cuenta con una Licenciatura en Computación por la Universidad Autónoma Metropolitana - Iztapalapa.

Resumen:  La necesidad de analizar grandes cantidades de datos ha tenido un crecimiento significativo en los últimos años. Una solución a este problema se resolvió mediante el uso del paradigma MapReduce ,cuya implementación open source es Apache Hadoop. Los programas de Hadoop están escritos en el API de Java, sin embargo, otros lenguajes utilizan un enfoque más abstracto con base en el paradigma MapReduce, como Pig o Jaql. Este artículo tiene como objetivo mostrar, mediante un ejemplo práctico, el uso de Pig para analizar grandes volúmenes de datos.

Fecha:  25-09-2012
Nivel:  Introductoria
Actividad:  1917 vistas
Comentario:  


1. Introducción a Pig

Originalmente desarrollado por Yahoo en el año 2006, Pig fue adoptado por la Apache Software Foundation a partir del año 2007; un año después obtuvieron la versión inicial como parte de un subproyecto de Apache Hadoop.



Apache Pig es una plataforma para el análisis de grandes conjuntos de datos que consta de un lenguaje de alto nivel para expresar programas de análisis, junto con la infraestructura para la evaluación de los mismos. La característica sobresaliente de los programas de Pig es que su estructura es susceptible a la paralelización, lo que a su vez le permite manejar enormes cantidades de información.

La capa de infraestructura de Pig se compone de un compilador que produce secuencias MapReduce, lo que permite a que los usuarios de Hadoop se enfoquen más en analizar los datos y dedicar menos tiempo en desarrollar aplicaciones MapReduce. El lenguaje de programación que utiliza Pig, Pig Latin, crea estructuras tipo SQL (SQL-like), de manera que, en lugar de escribir aplicaciones separadas de MapReduce, se pueda crear un script de Pig Latin el cual es automáticamente paralelizado y distribuido a través de un clúster.

1.1 “Pig Philosophy”

Para lograr un mejor entendimiento sobre el objetivo de la creación de Pig, el equipo de desarrollo decidió definir una serie de enunciados que resumen el proyecto, mediante una similitud con el nombre:

  • Pigs eat anything: Al igual que cualquier cerdo que come cualquier cosa, Pig puede operar con cualquier tipo de dato, sea éste estructurado, semi-estructurado o no estructurado.
  • Pigs live anywhere: A pesar de que Pig fue inicialmente implementado en Hadoop, no está orientado solamente a esta plataforma. Su propósito es ser un lenguaje de procesamiento paralelo.
  • Pigs are domestic animals: Pig está diseñado para ser controlado y modificado fácilmente por sus usuarios. Pig puede enriquecerse a través de funciones definidas por el usuario (UDF). Con el uso de UDFs se puede extender Pig para un procesamiento personalizado.
  • Pigs Fly: Pig procesa datos rápidamente. La intención es mejorar el rendimiento y no las características, lo que evita que demasiada funcionalidad le impida “volar”.

1.2 ¿Quién usa Pig?

Naturalmente Yahoo!, al ser creador de Pig, fue el primer usuario de la plataforma, tanto para los procesos de búsqueda web como al incorporarlo en Hadoop. De hecho, más de la mitad de procesos que son ejecutados en Hadoop están basados en scripts de Pig Latin. Pero no sólo Yahoo ha utilizado Pig; a partir del año 2009 otras compañías comenzaron a adoptar Pig dentro de su procesamiento de datos, algunas de ellas son:

  • “Gente que podrías conocer”, este componente de LinkedIn utiliza Hadoop y Pig para ofrecer recomendaciones de conocidos, páginas y empleos de interés.
  • “select count(*) from tweets”, definitivamente SQL no es la opción para analizar tweets, retweets, usuarios, seguidores,etc., que conforman más de 12TB de información diaria. Twitter utiliza Pig para procesar estos logs de datos.
  • AOL y WhitePages utilizan Pig para filtrar registros en sus procesos de búsqueda de información.

2. Pig Latin

Pig Latin es un lenguaje de flujos de datos en paralelo. Esto es, que permite a los programadores describir cómo los datos provenientes de una o más entradas deben ser leídos, procesados y luego almacenados a uno o más flujos de salida en paralelo.

La sintaxis de Pig Latin es muy similar a la de SQL, aunque Pig Latin es un lenguaje de transformación de datos y, por lo tanto, es similar a los optimizadores de consultas de base de datos de los sistemas de bases de datos actuales.

Escribir programas MapReduce en Java pueden consistir en más de cien líneas de código, según la complejidad de los mismos, mientas que los scripts de Pig Latin comúnmente no toman más de 10 líneas de código.

2.1 Aprendiendo a “gruñir”

Pig Latin ejecuta sentencias, las cuales toman datos de entrada denominados “bag” que representan un conjunto de tuplas, emitiendo otro “bag” como salida. Una “tupla” es una secuencia de campos, donde cada uno de ellos pueden ser de cualquier tipo de dato. De manera que cada línea de procesamiento genera un nuevo conjunto de datos llamado “relación”. Se podría relacionar a una “bag” como la representación de una tabla en una base de datos relacional, donde las tuplas son los renglones y cada tupla en particular está contenida de campos.

Tupla	('pig','latin')
Bag	{('pig','latin'),('IBM', ('BigInsights'),('Hadoop'))}

En Pig Latin no existen condicionales tipo if o ciclos mediante el uso de for, dado que Pig Latin se enfoca en el flujo de los datos y no en describir el control del flujo de los datos como otros paradigmas de programación.

Pig Latin utiliza operadores relacionales para efectuar diversas operaciones sobre los datos que se están analizando, desde la carga de los datos hasta su almacenamiento en un archivo. Aunque ya mencionaba que no existen ciclos for en Pig Latin, existe el operador FOREACH cuya naturaleza es iterar sobre las tuplas y transformar los datos para generar un nuevo conjunto de datos durante la iteración. Considerando la similitud de este operador con la terminología de base de datos, se podría decir que FOREACH es el operador de proyección de Pig.

Algunos de los operadores relacionales existentes en Pig Latin se describen en la Tabla 1.


Tabla 1. Algunos operadores relacionales de Pig Latin
Operador Descripción
DISTINCT Elimina duplicados en una relación.
FILTER Selecciona un conjunto de tuplas de una relación basado en una condición
FOREACH Itera las tuplas de una relación, generando un nuevo conjunto de datos
GROUP Agrupa los datos en una o más relaciones
JOIN Une dos o más relaciones (existe tanto inner join como outer join)
LIMIT Establece el límite de tuplas de salida
LOAD Carga datos de un sistema de archivos
ORDER Ordena una relación basado en uno o más campos
SPLIT Divide una relación en una o más relaciones
STORE Almacena información transformada en el sistema de archivos

Además de los operadores relacionales, existen a su vez operadores de diagnóstico que son de mucha utilidad para depurar los scripts de Pig Latin. El operador DUMP nos permite desplegar en pantalla el contenido de una relación, DESCRIBE imprime en pantalla el esquema detallado de una relación (campo y tipo) y, EXPLAIN nos permite visualizar cómo los operadores están agrupados en procesos MapReduce.

El Listado 1 muestra un ejemplo sencillo de un script de Pig Latin.


Listado 1. Ejemplo script en Pig Latin

// Se carga información de estudiantes y se genera la relación 'A'
grunt> A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
// A partir de la relación 'A' se filtra el nombre y se genera una nueva relación 'B'
grunt> B = FOREACH A GENERATE name;
// Con el operador DUMP se imprime en pantalla el contenido de la relación 'B'
grunt> DUMP B;
(John)
(Mary)
(Bill)
(Joe)
grunt>
 

Como se logró observar en este pequeño script de Pig Latin, se crearon 2 relaciones, la primera contiene todas las tuplas con la información de los estudiantes, y la segunda contiene solamente los valores de los nombres. Claramente el ejemplo pudiera resolverse con una sola línea de SQL, sin embargo, el problema puede resultar más complicado cuando se analizan enormes volúmenes de información y los cálculos sean más complejos.

2.2 ¿No es suficiente con MapReduce? ¿Porqué otro lenguaje?

Una de las grandes ventajas que ofrece Pig es el uso de los operadores relacionales como JOIN, FILTER, GROUP BY, etc., los cuales en MapReduce resulta costosa la implementación, además de terminar con un algoritmo de cientos de líneas de código.

En MapReduce no hay manera de optimizar o revisar el código del usuario para proveer estadísticas de desempeño, en cambio, Pig puede analizar los scripts de Pig Latin para revisión de errores y optimización del flujo de datos.

Aunque en MapReduce el costo de escribir y mantener código es mucho mayor que en Pig o inclusive que en Jaql(Query Language for JSON), no siempre buscar una opción alterna a MapReduce puede ser lo más viable, puesto que es posible desarrollar algoritmos en MapReduce que no puedan ser tan fácilmente implementados en Pig o Jaql. De manera que para algoritmos no tan triviales y que sean sensibles a un muy alto rendimiento, MapReduce sigue siendo la mejor opción.

2.3 ¿Qué puedo resolver con Pig?

Así como el uso que varias empresas le han dado a Pig, existen muchos datos sin procesar (raw data) que constantemente están entregando información, de manera que combinar estos datos permite construir modelos de predicción del comportamiento. Pig podría ser utilizado para capturar todas las interacciones del usuario en un sitio web y dividir a los usuarios en varios segmentos. Así, para cada segmento se produce un modelo matemático que predice como los miembros de ese segmento responden a los tipos de anuncios o artículos de noticias. De tal modo que el sitio web pueda mostrar anuncios que sean más propensos a hacer clic o publicar noticias que tengan más probabilidades de atraer a los usuarios y hacer que regresen al sitio.

Si bien hemos visto hasta ahora que Pig permite crear procesos para analizar flujos de datos y con el uso de operadores relaciones hace aún más sencilla la agrupación, unión y agregación de los mismos, ¿Será que existe una similitud entre Pig y una herramienta ETL (Extract Transform Load)? En efecto, este es otro de los casos de uso de Pig. Dado que los datos son presentados en diversos formatos, necesitan ser procesados y almacenados en una base de datos para posteriormente ejecutar queries sobre ellos. Pig permite paralelización gracias a Hadoop y aunque diversas herramientas ETL permiten descomponer los procesos en pequeños segmentos, los scripts de Pig son aún más simples y fáciles de entender.

Sin embargo, esto no indica que sea un reemplazo de una herramienta de ETL, puesto que además de que no provee funcionalidades específicas de un ETL(y que no fue desarrollado para tal fin), el uso de Pig para todos los procesos de ETL sería una exageración cuando los datos razonablemente pueden manejarse en una instancia de base de datos.


3. Analizando datos meteorológicos con Apache Pig

Generalmente no pensamos en Big Data cuando nos encontramos bajo una tormenta o cuando existen cambios climáticos que afectan nuestras actividades cotidianas. Sin embargo, los datos climáticos son una inmensa fuente de información, que se ha medido desde hace años. Por ello, analizar datos meteorológicos es un excelente escenario para Big Data, puesto que esta información varía todo el tiempo y el volumen crece constantemente.

Para este ejemplo en particular, me basaré en el artículo previamente publicado por mi colega Alexander Ambriz en donde describe como Utilizando JAQL para analizar Big Data.

El Servicio Meteorológico Nacional (http://smn.cna.gob.mx/emas/), publica información sobre diferentes variables meteorológicas como velocidad del viento, temperatura, presión, etc., la cual es actualizada cada 10 minutos.

En la Figura 1 se puede verificar la información registrada en México, Distrito Federal.

Figura 1. Sistema de Estaciones Meteorológicas



Haga click aquí para ver la figura 1 en su tamaño original.

Dicha información es publicada en archivos de texto de manera tabular.

El Listado 2 muestra un ejemplo del formato publicado por tal sistema para una estación en particular:


Listado 2. Archivo TXT del Servicio Meteorológico Nacional
Estación:       TEZONTLE,  DF
Operada por:    SMN EMAS
Longitud:       99°05'58"  Latitud: 19°23'05"  Altitud: 2358

DD/MM/AAAA HH:MM     DIRS DIRR   VELS    VELR   TEMP   HR   PB     PREC  RAD-SOL
10/06/2012 23:10     95   94     20.90   41.60  28.3   12   776.6  0.0   443.0
10/06/2012 23:20     95   95     22.40   40.00  28.2   11   776.6  0.0   407.0
10/06/2012 23:30     95   95     11.80   19.30  27.3   15   775.0  0.0   378.0
10/06/2012 23:40     95   95     14.60   26.20  27.6   15   775.1  0.0   364.0
10/06/2012 23:50     95   95     11.20   29.50  27.7   15   775.1  0.0   327.0
11/06/2012 00:00     95   95     18.00   28.70  27.6   15   775.1  0.0   279.0
11/06/2012 00:10     95   95     19.10   28.90  27.2   16   775.1  0.0   205.0
11/06/2012 00:20     95   95     17.50   34.20  26.9   16   775.2  0.0   185.0
11/06/2012 00:30     95   95     17.90   34.30  27.2   15   777.2  0.0   130.0
11/06/2012 00:40     95   95     28.00   42.70  26.8   21   777.3  0.0   95.0
11/06/2012 00:50     95   95     27.00   42.50  26.2   23   777.5  0.0   61.0
11/06/2012 01:00     95   95     28.60   43.10  25.8   24   777.6  0.0   32.0
11/06/2012 01:10     95   95     28.50   43.20  25.3   24   777.7  0.0   12.0
11/06/2012 01:20     95   94     25.90   37.80  25.0   25   777.8  0.0   1.0
...
(Para ver todo el contenido del archivo TXT da clic aquí)


Este ejemplo consiste en obtener la temperatura máxima registrada por la estación meteorológica, para lo cual se necesitan realizar diveras operaciones mismas que se encuentran descritas en el Listado 3 mediante un script en Pig Latin.


Listado 3. Script en Pig Latin para calcular la temperatura máxima
smnData = LOAD '/SampleData/Pig/DF04_10M.TXT' USING PigStorage('\n');
cleanSmnData = FILTER smnData BY (chararray)$0 MATCHES 
                '\\d{2}/\\d{2}/\\d{4}.*' and SIZE($0)>=66;
temperature = FOREACH cleanSmnData GENERATE SUBSTRING($0, 62, 66);
groupTemperature = GROUP temperature ALL;
maxTemperature = FOREACH groupTemperature GENERATE MAX(temperature.$0);
DUMP maxTemperature;


A continuación observaremos a detalle cada uno de los pasos ejecutados por el script en Pig Latin:

  1. smnData = LOAD '/SampleData/Pig/DF04_10M.TXT' USING PigStorage('\n');

Esta línea carga los datos del archivo DF04_10M.TXT (si sólo se hubiera indicado el directorio, leería todos los archivos contenidos en el mismo). PigStorage es la función por defecto para la carga de datos así que igualmente pudo haberse omitido, o bien haber indicado una función que sea más personalizada. En la Figura 2 se puede observar el contenido de las tuplas generadas para la relación smnData.

Figura 2. Tuplas de la relación smnData

  1. cleanSmnData = FILTER smnData BY (chararray)$0 MATCHES '\\d{2}/\\d{2}/\\d{4}.*' and SIZE($0)>=66;

Esta línea realiza el filtro (FILTER) del conjunto de datos de la relación smnData mediante el uso de una expresión regular (MATCHES) para crear un nuevo conjunto de datos que sólo contenga la información que me interesa analizar, desde la fecha hasta la radiación solar, eliminando los encabezados y aquellas líneas que son menores a 66 caracteres, ya que pudieran haber presentado algún error desde la captura por las estaciones meteorológicas.

Figura 3. Tuplas de la relación cleanSmnData

  1. temperature = FOREACH cleanSmnData GENERATE SUBSTRING($0, 62, 66);

La línea anterior genera una transformación de las tuplas para obtener solamente los datos correspondientes a la columna TEMP. En la Figura 4 se puede observar las tuplas de la relación temperature.

Figura 4. Tuplas de la relación temperature

  1. groupTemperature = GROUP temperature ALL; maxTemperature = FOREACH groupTemperature GENERATE MAX(temperature.$0);

Estas líneas agrupan los valores transformados en la relación temperature y obtienen la temperatura máxima de dicha agrupación. Si pensaramos en SQL seguramente el valor máximo se podría obtener sin agrupar los valores, sin embargo, en Pig Latin la función MAX requiere que se haya ejecutado anteriomente la sentencia GROUP ALL para calcular valores máximos.

Figura 5. Tuplas de la relación groupTemperature

Si se quisieran optimizar las dos líneas de código anteriores, podemos utilizar esta opción alterna que nos permite obtener el mismo resultado pero de una manera más eficiente y rápida. Simplemente ordenamos la relación temperature de manera descendente y obtenemos el primer valor que sería la temperatura máxima. Este mismo tipo de “mejores prácticas” se utiliza también en SQL.

groupTemperature = ORDER temperature BY $0 DESC;
maxTemperature = LIMIT groupTemperature 1;

  1. DUMP maxTemperature;

Y finalmente con el operador DUMP se imprime en pantalla la temperatura máxima registrada.


4. InfoSphere BigInsights

IBM InfoSphere BigInsights™ está basado en Apache Hadoop y está diseñado para ayudar a los profesionales de TI a comenzar a trabajar rápidamente con el análisis de grandes volúmenes de información mediante Hadoop. Facilita la instalación, integración y seguimiento de esta tecnología de código abierto.

InfoSphere BigInsights ofrece un gran valor a las organizaciones que se enfrentan a analizar volúmenes de datos a escala de Internet (petabytes) que existen en diversos formatos, y que pueden ser propagados a muchos lugares distintos; a empresas que están interesadas en una mayor flexibilidad para entender patrones y hacer análisis eficientes sobre cuestionamientos tipo "what if?".

La distribución de IBM de Apache Hadoop, InfoSphere BigInsights, contiene los siguientes componentes:

  • Jaql, un lenguaje de consulta diseñado para JavaScript Object Notation (JSON), se utiliza principalmente para analizar datos semi-estructurados a gran escala.
  • Avro, un sistema de serialización de datos.
  • Flume, un servicio distribuido, confiable y de alta disponibilidad para mover de manera eficiente grandes cantidades de datos alrededor de un clúster.
  • HBase, una base de datos distribuida no relacional escrita en Java.
  • Hive, una infraestructura de data warehouse que facilita tanto la extracción de datos, transformación y carga (ETL), y el análisis de grandes conjuntos de datos que se almacenan en el sistema de archivos distribuidos Hadoop (HDFS).
  • Lucene, un motor de búsqueda de texto de alto rendimiento escrito en Java.
  • Oozie, un administrador de coordinación de flujos de trabajo.
  • Orchestrator, un avanzado sistema de control de procesos MapReduce, el cual utiliza un formato JSON para describir los flujos de trabajo y las relaciones entre ellos.
  • Pig, como se observó en este artículo, es una plataforma para el análisis de grandes conjuntos de datos, consiste en un lenguaje de alto nivel para la expresión de los programas de análisis y de una infraestructura para la evaluación de dichos programas.
  • BigInsights Scheduler, se asegura que todos los procesos obtengan una adecuada asignación de recursos.
  • Zookeeper, un servicio centralizado para el mantenimiento de la información de configuración, ofreciendo sincronización distribuida.

5. Conclusiones

Este artículo demostró cómo Pig Latin puede utilizarse para crear algoritmos MapReduce de una manera más simple y sencilla, generando líneas de código mucho más legibles y mantenibles en el tiempo. Pig proporciona una abstracción útil sobre MapReduce; es decir, permite escribir sentencias de manipulación de datos y queries en un lenguaje de alto nivel y gracias a su modelo MapReduce subyacente es capaz de paralelizar automáticamente y escalar las operaciones realizadas proporcionando un fuerte apoyo para el trabajo con conjuntos de datos muy grandes.

Tanto Pig como Jaql ofrecen fácil programación para Hadoop, permitiendo un rápido desarrollo en comparación con la interfaz de Java que provee Hadoop.

Pig está más orientado hacia el enfoque de programación procedural y no hacia el enfoque declarativo (como es el estilo de SQL), además de proveer la capacidad de controlar los planes de ejecución. Si bien Pig ofrece un alto nivel de manipulación de datos primitivos como en la proyección y la unión, lo hace en un estilo mucho menos declarativo que SQL.

Quizás el ejemplo resulte sencillo como para poder observar el gran valor que ofrece Pig al analizar Big Data, sin embargo, recordemos que en un ambiente real se estarían involucrando otros tipos de contenido además de que el gran volumen de información generado (como puede ser el proveniente de estaciones meteorológicas) resulta demasiado complejo de analizar con otras herramientas tradicionales.

IBM InfoSphere BigInsights™ permite agilizar y facilitar la implementación de proyectos asociados con Big Data debido que además de incluir diversos subproyectos relacionados con Hadoop, también existe un gran número de componentes desarrollados por IBM como BigSheets, el cuál presenta una interfaz similar a una hoja de cálculo para que los usuarios puedan modelar, filtrar, combinar, explorar y graficar los datos obtenidos de diversas fuentes. Tras bambalinas, BigSheets traduce los comandos de usuario, expresados a través de una interfaz gráfica, en scripts de Pig ejecutados en un subconjunto de datos subyacentes. De esta manera, un analista puede explorar de manera iterativa diversas transformaciones eficientemente.


6. Recursos


Sobre el autor

Ricardo Barranco Fragoso

Ricardo Barranco Fragoso es IT Specialist para Information Management de IBM Software Group México, desde diciembre de 2010. Entre las principales soluciones en las que está enfocado se encuentran: Master Data Management, Identity Insight y Big Data (InfoSphere BigInsights e InfoSphere Streams); en este rol participa activamente en apoyo de las actividades de preventa. Con más de 7 años de experiencia, antes de su incorporación a IBM, Ricardo ha participado en diversos proyectos de software como Desarrollador Senior, Líder Técnico y Arquitecto Jr. utilizando principalmente tecnología Java Enterprise Edition y Rich Internet Applications. Ricardo cuenta con una Licenciatura en Computación por la Universidad Autónoma Metropolitana - Iztapalapa.

Ayuda para reportar abusos

Reportar abusos

Gracias. Esta entrada ha sido marcada para la atención de un moderador.


Ayuda para reportar abusos

Reportar abusos

Falló el envío del reporte de abusos. Por favor intente después.


developerWorks: Ingresar


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. Cierta información de su perfil será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo), y nombre de usuario acompañarán el contenido que usted publica.

Elija su nombre de usuario

La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. Cierta información de su perfil de developerWorks será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo) y nombre de usuario acompañarán el contenido que usted publique.

(Debe ser entre 3 – 31 caracteres.)


Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Califique este artículo

Comentario

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=
ArticleID=837413
ArticleTitle=Análisis de Big Data con Apache Pig
publish-date=09252012