我有猪的格式数据
{(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)
有人可以帮我解决这个问题。
答案 0 :(得分:3)
根据您的示例输入数据,这应该可以解决问题:
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)