You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@pig.apache.org by Jonathan Holloway <jo...@gmail.com> on 2011/06/22 18:28:11 UTC

Flatten a bag to a specific datatype

I'm having trouble trying to flatten a bag to a tuple of int's in Pig,

e.g.

{(12),(4),(7),(190)}

to:

(12,4,7,190)

It seems like it should be trivial to do, but not quite sure how to do it.
 Can this by done with inbuilt Pig
commands or do i need a custom UDF or an exec?

Many thanks,
Jon.

Re: Flatten a bag to a specific datatype

Posted by Aniket Mokashi <an...@gmail.com>.
Hi,

I think UDF BagToTuple should do it for you.
>From some old email thread, I find (I think you will have to change
getBagField to get etc)--

public class BagToTuple extends EvalFunc<Tuple>{
     @Override
     public void exec(Tuple input, Tuple output) throws IOException{
         DataBag bag = input.getBagField(0);
         Iterator<Tuple> iter = bag.content();
         while (iter.hasNext()){
             output.appendField(iter.next().getAtomField(0));
         }
     }
 }

Thanks,
Aniket

On Wed, Jun 22, 2011 at 9:28 AM, Jonathan Holloway <
jonathan.holloway@gmail.com> wrote:

> I'm having trouble trying to flatten a bag to a tuple of int's in Pig,
>
> e.g.
>
> {(12),(4),(7),(190)}
>
> to:
>
> (12,4,7,190)
>
> It seems like it should be trivial to do, but not quite sure how to do it.
>  Can this by done with inbuilt Pig
> commands or do i need a custom UDF or an exec?
>
> Many thanks,
> Jon.
>



-- 
"...:::Aniket:::... Quetzalco@tl"