我有数据要绘制的数据,但聚合参数取决于用户。数据看起来像这样 -
Date Country Browser Count
---- ------- ------- -----
2015-07-11,US,Chrome,18
2015-07-11,US,Opera Mini,10
2015-07-11,US,Firefox,21
2015-07-11,US,IE,11
2015-07-11,US,Safari,8
...
2015-07-11,UK,Chrome,102
2015-07-11,UK,IE,45
2015-07-11,UK,Mobile Safari,47
2015-07-11,UK,Firefox,40
...
2015-07-11,DE,Android browser,50
2015-07-11,DE,Chrome,3
2015-07-11,DE,IE,11
2015-07-11,DE,Firefox,20
用户将通过(国家或浏览器)告诉我要聚合的内容,并且我想显示计数。例如,按国家/地区分组(按浏览器汇总),它将是 -
2015-07-11,US,ALL,68
2015-07-11,UK,ALL,234
2015-07-11,DE,ALL,84
而按浏览器分组(按国家/地区汇总)可能是 -
2015-07-11,ALL,IE,67
2015-07-11,ALL,Chrome,123
2015-07-11,ALL,Firefox,81
我是否必须根据每一列编写单独的脚本,或者是否有更有效的方法来执行此操作?
答案 0 :(得分:0)
最好编写别名和字段名称的宏:'country','browser'。聚合逻辑保持不变。
参考:http://pig.apache.org/docs/r0.10.0/cont.html#macros
示例:
猪脚本:
DEFINE AGGR_DATA(alias, field_name) RETURN aggr_alias {
alias_grp = GROUP $alias BY $field_name;
-- REST OF LOGIC
$aggr_alias = -- AGGR DATA;
}
用法:
aggr_data = AGGR_DATA(browser_data_alias,'country');
将必填字段名称传递给宏。