Pig:动态聚合具有特定参数

时间:2015-08-03 21:07:06

标签: hadoop apache-pig hdfs

我有数据要绘制的数据,但聚合参数取决于用户。数据看起来像这样 -

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

我是否必须根据每一列编写单独的脚本,或者是否有更有效的方法来执行此操作?

1 个答案:

答案 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'); 

将必填字段名称传递给宏。