我有 pig 的格式数据{(group, productId, count)}
。
现在,我想获得每个组中的最大数量,输出可能如下所示{(group, productId, maxCount)}
。这是样本输入数据
(south America,prod1, 45),(south America,prod2, 36), (latin america, prod1, 48),(latin america, prod5,35)
这是此输入的输出,看起来像
(south america, prod1, 45)
(North America, prod2, 36)
(latin america, prod1, 48)
有人可以帮我吗
最佳答案
根据您的样本输入数据,这应该可以解决问题:
data = load 'sf.csv' using PigStorage(',') as (country:chararray, product:chararray, c:int);
g = group data by country;
result = foreach g {
prods = order data by c desc;
top_prods = limit prods 1;
generate flatten(top_prods);
}
dump result;
这按第一列对输入进行分组,然后在嵌套的foreach中按计数对每组产品进行排序,然后采用第一个(最高计数)。
输出:
(latin america,prod1,48)
(south America,prod1,45)