要求:统计一个文件中某列的平均值;
文件如下:
[root@master zuoye]# cat a.txt 
a 1 2 3 4.2 9.8 
a 3 0 5 3.5 2.1 
a 7 9 9 2.6 6.2 
a 1 2 5 7.7 5.9 
a 1 2 3 1.4 0.2

按照第二、三、四列为分组,求第五、第六列平均值;
命令如下:
grunt> A = LOAD 'a.txt'using PigStorage(' ') as (a1, a2, a3,a4,a5,a6);
grunt> B = group A by (a2,a3,a4);
grunt> C = FOREACH B GENERATE group, AVG(A.a5),AVG(A.a6);  
grunt> DUMP C; 

结果:
((1,2,3),2.8,5.0)
((1,2,5),7.7,5.9)
((3,0,5),3.5,2.1)
((7,9,9),2.6,6.2)
解析:
第一步中先加载文件,并且以空格分割,分割完后列名分别为a1.....6,你可以起你好记的名字;
第二步按照a2,a3,a4分组;
第三步遍历B(foreach是遍历)的每一行,AVG是取平均值;
第四步输出,这个输出后默认路径;可以指定输出路径命令:grunt> STORE C INTO 'output';文件会保存在output次目录下;


09-06 11:24