2012-05-29 22 views
8

Tengo una colección de tuplas de la forma (t, a, b) que quiero agrupar por b en Pig. Una vez agrupados, quiero filtrar b de las tuplas en cada grupo y generar una bolsa de tuplas filtradas por grupo.Proyección de tuplas agrupadas en Pig

A modo de ejemplo, supongamos que tenemos (1,2,1) (2,0,1) (3,4,2) (4,1,2) (5,2,3)

El script cerdo produciría {(1,2), (2,0)} {(3,4), (4,1)} {(5,2)}

La pregunta es: ¿cómo hago para producir este resultado? Estoy acostumbrado a ver ejemplos donde las operaciones de agregación siguen a un grupo por operación. No tengo muy claro cómo filtrar las tuplas y devolverlas en una bolsa. ¡Gracias por tu ayuda!

Respuesta

8

Resulta que lo que estaba buscando es la sintaxis para la proyección anidada en Pig.

Si uno tiene tuplas de la forma (t, a, b) y quiere dejar b después del grupo, se hace de esta manera.

grouped = GROUP tups BY b; 
result = FOREACH grouped GENERATE tup.(t,a); 

Consulte la sección "Proyección anidada" en la página de PigLatin. http://wiki.apache.org/pig/PigLatin