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中其实类似于把列转成行
({(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中其实类似于把列转成行