我有 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)
    

    10-07 13:25