【问题标题】:Pig Order By QueryPig Order By Query
【发布时间】:2012-02-25 20:35:48
【问题描述】:
grunt> dump jn;

(k1,k4,10)
(k1,k5,15)
(k2,k4,9)
(k3,k4,16)

grunt> jn = group jn by $1;
grunt> dump jn;


(k4,{(k1,k4,10),(k2,k4,9),(k3,k4,16)})
(k5,{(k1,k5,15)})

现在,从这里我想要以下输出:

(k4,{(k3,k4,16),(k1,k4,10)})
(k5,{(k1,k5,15)})

基本上,我想对数字进行排序:10、9、16,并为每一行选择前 2 个。
我该怎么做?

【问题讨论】:

    标签: group-by sql-order-by apache-pig


    【解决方案1】:

    这类似于question,您可以使用Nested FOREACH,例如:

    A = LOAD 'data';
    jn = group A by $1;
    B = FOREACH jn {
      sorted = ORDER A by $2 ASC;
      lim = LIMIT sorted 2;
      GENERATE lim;
    };
    DUMP B;
    

    【讨论】:

    • 您也可以只使用 TOP() 函数而不是 ORDER 和 LIMIT。它在 Piggybank 中用于 Pig = 0.8
    • 我也有类似的问题。我正在使用 TOP() 但在 TOP(2) 中,如果输入是 {10,5,5,1,2} 我希望我的输出是 {10,5,5} 但实际上它的 {10,5} 我怎么能解决这个问题?
    • 不应该按 DESC 排序吗?因为要求前 2 名?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2019-03-15
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多