【问题标题】:Filter records in Pig在 Pig 中过滤记录
【发布时间】:2017-08-10 04:57:12
【问题描述】:

下面是数据

col1,col2,col3,col4,col5
------------------------
10,20,30,40,dollar
20,30,40,50,dollar
20,30,10,50,dollar
61,62,63,64,dollar
61,62,63,64,pound

col1,col2,col3 将形成唯一键的组合。用例是根据 col5 过滤数据。 对于唯一的组合键,我们需要过滤 col5 值为“dollar”的记录,前提是相同组合具有“pound”值。

预期的输出是

col1,col2,col3,col4,col5
------------------------
10,20,30,40,dollar
20,30,40,50,dollar
20,30,10,50,dollar
61,62,63,64,pound

由于 Pig 中没有像 Hive 这样的特殊运算符,因此如何进一步进行。

A = load 'test1.csv' using PigStorage(',') as (col1:int,col2:int,col3:int,col4:int,col5:chararray);
B = FILTER A BY col5 == 'pound';

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    获取所有带有 'pound' 的记录,然后获取所有带有 'dollar' 且与 col5 中带有 'pound' 的 id 组合不匹配的记录。最后,把他们嫁出去...... UNION。

    B = FILTER A BY col5 == 'pound';
    C = JOIN A BY (col1,col2,col3) LEFT OUTER,B BY (col1,col2,col3);
    D = FILTER C BY (B::col1 is null);
    E = FOREACH D GENERATE A::col1,A::col2,A::col3,A::col4,A::col5;
    F = UNION B,E;
    DUMP F;
    

    输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多