pig 次数统计和列传行

b= foreach a generate TOKENIZE(line) as word;


({(air),(2013),(us),(eu),(20)})
({(air),(2013),(us),(eu),(30)})
({(air),(2012),(us),(eu),(40)})
({(hotel),(2013),(us),(eu),(20)})
({(hotel),(2013),(us),(eu),(20)})
({(hotel),(2012),(us),(eu),(30)})
()

c= foreach b generate flatten(word) as  words;

(air)
(2013)
(us)
(eu)
(30)
(air)
(2012)
(us)
(eu)
(40)
(hotel)
(2013)

grunt> describe b;
b: {word: {tuple_of_tokens: (token: chararray)}}
grunt> describe c;
c: {words: chararray}


flatten in tuple:
grunt> cat /usr/egencia/go4.txt;
(a,(c,b))
grunt> a= load '/usr/egencia/go4.txt' using PigStorage(',') as (f1,f2:tuple(f3,f4));

grunt> describe a;
a: {f1: bytearray,f2: (f3: bytearray,f4: bytearray)}
grunt> b = foreach a generate f1,flatten(f2);
grunt> describe b;
b: {f1: bytearray,f2::f3: bytearray,f2::f4: bytearray}

grunt> dump b;
((a,)
(,)

走了一些弯路,很明显是按照逗号分隔了,验证下,

grunt> dump a;
((a,)
(,)
grunt> a= load '/usr/egencia/go4.txt' using PigStorage(',') as (f1,f2);        
grunt> dump a;
((a,(c)
(,)

于是乎:
grunt> a= load '/usr/egencia/go4.txt'  as f1:tuple(f2,f3:tuple(f4,f5));
grunt> dump a;
((a,(c,b)))
grunt> describe a;
a: {f1: (f2: bytearray,f3: (f4: bytearray,f5: bytearray))}
grunt> b = foreach a generate flatten(f1);
grunt> describe b;
b: {f1::f2: bytearray,f1::f3: (f4: bytearray,f5: bytearray)}
grunt> c= foreach b generate f1::f2 as f1,flatten(f1::f3) as (f2,f3);
grunt> describe c;
c: {f1: bytearray,f2: bytearray,f3: bytearray}
grunt>dump c;
(a,c,b)


flatten in bag;

grunt> cat /usr/egencia/go6.txt;                                                
(a,{(b,c),(c,d)})

grunt> a = load '/usr/egencia/go6.txt' as f1:tuple(f2,f3:bag{});

grunt> dump a;

((a,{(b,c),(c,d)}))

grunt> describe b;
b: {f1: bytearray,f2: {()}}

grunt> dump b;

(a,{(b,c),(c,d)})
grunt> c= foreach b generate f1,flatten(f2);

grunt> dump c;
(a,b,c)
(a,c,d)

flatten 在bag中其实类似于把列转成行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值