pig:使用特定参数动态聚合

kzmpq1sx  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(375)

我有一些我想绘制的数据,但是聚合参数取决于用户。数据是这样的-

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

我需要根据每一列分别编写脚本吗?还是有更有效的方法?

bqucvtff

bqucvtff1#

最好编写一个宏,将别名和字段名“country”、“browser”传递给该宏。聚合逻辑保持不变。
裁判:http://pig.apache.org/docs/r0.10.0/cont.html#macros
例子:
Pig脚本:

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

将所需的字段名传递给宏。

相关问题