代码之家  ›  专栏  ›  技术社区  ›  Harshit Kakkar

清管器,count array_元素

  •  0
  • Harshit Kakkar  · 技术社区  · 7 年前

    1,1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|2|2|2|3|3|1|1|1|1|1|1|1|1|1|2|3,2016-17-08
    2,1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1,2016-07-10
    3,1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1,2017-06-04
    

    我想计算每个数组中的1个数,以便确定哪个产品的1个数最高

    grunt> a= load 'product_details.csv' using PigStorage(',') as (product_id :int, event_id:chararray, date:chararray);
    

    我不明白我应该如何计算数组中的元素?

    1 回复  |  直到 7 年前
        1
  •  0
  •   nobody    7 年前

    标记第二个字段中的字母。然后使用“按乘积分组”和“按字母分组”获得计数。过滤所有字母为1的产品,最后按desc顺序排序,并获得顶部记录,以获得1计数最高的产品。

    A = LOAD 'product_details.csv' using PigStorage(',') AS(col1:int,col2:chararray,col3:chararray);
    B = FOREACH A GENERATE col1,FLATTEN(TOKENIZE(col2,'|')) AS letter;
    C = GROUP B BY (col1,letter);
    D = FOREACH C GENERATE FLATTEN(group) as (product,letter),COUNT(B.letter) as total;
    E = FILTER D BY (letter == '1');
    F = ORDER E BY total DESC;
    G = LIMIT F 1;
    DUMP G;
    

    输出

    enter image description here