有一需求,在HDFS数据上分组聚合累加一列的值,汇总后排序取TOP,pig脚本思路如下:
假设有如下数据在HDFS上:
cat city.txt:
wh 500
bj 600
wh 100
sh 400
wh 200
bj 100
sh 200
bj 300
sh 900
第一列是城市缩写,第二列是城市某值统计,现需要将城市列合并,并将第二列在城市聚合的基础上做累加。 操作如下:
a = load '/data/city.txt' using PigStorage(' ') as (city:chararray, value:int);
b = group a by city;
c = foreach b generate group , SUM(a.value);
dump c;
显示如下:
(bj,1000.0)
(sh,1500.0)
(wh,800.0)
做排序,取TOP:
d = limit (order c by $1 desc) 2;
dump d;
显示:
(sh,1500.0)
(bj,1000.0)
emmmmmmm大概就这样吧,不知道有没有优化手段。
参考资料: https://blog.csdn.net/wisgood/article/details/17230691 http://www.mamicode.com/info-detail-1020467.html 《Hadoop权威指南》P442