【问题标题】:I need to filter 2 conditions from the same column in PIG HADOOP我需要从 PIG HADOOP 的同一列中过滤 2 个条件
【发布时间】:2021-05-27 19:46:53
【问题描述】:

我是猪新手。

我想要实现的是从 1 个表中获取 2 个值,并查找某个 id 是否同时具有这两个项目。

例如

产品表

Product Name
Tofu
Ikura
Sushi

订单表

Order ID Product Name
123 Ikura
124 Ikura
124 Tofu
125 Sushi
126 Tofu
127 Tofu

我想要实现的是 |订单编号 |产品名称 | |:---:|:--:| |124|井仓| |124|豆腐|

我想找到 Ikura 和 Tofu 的所有 orderID。

到目前为止我尝试过的是:

fil = FILTER productTbl BY PRODUCT_NAME IN ('Ikura', 'Tofu');

joinTable = join order_detailTbl by PRODUCT_ID, fil by PRODUCT_ID;

generateID = foreach joinTable generate ORDER_ID;

它为我提供了具有 Ikura 或 Tofu 的所有订单 ID 的输出。但条件是两者都在 1 个订单 ID 中。

我已经尝试了各种方法,但我不知道该怎么做...任何帮助将不胜感激!谢谢!!

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    使用AND

    fil = FILTER productTbl BY (PRODUCT_NAME = 'Ikura' AND PRODUCT_NAME = 'Tofu');
    

    【讨论】:

      【解决方案2】:

      要获取同时包含“Ikura”和“Tofu”的订单,您需要按订单 ID 对数据进行分组。然后,将袋子过滤到包含这两个值的袋子。最后,过滤非空袋的数据。

      grp = GROUP productTbl BY ORDER_ID;
      
      ikuraTofuIds = FOREACH grp {
          ikuras = FILTER productTbl BY PRODUCT_NAME == 'Ikura';
          tofus = FILTER productTbl BY PRODUCT_NAME == 'Tofu';
          GENERATE group AS ORDER_ID,
          ikuras,
          tofus;
      }
      
      ikuraTofuOrders = FILTER ikuraTofuIds BY NOT IsEmpty(ikuras) AND NOT IsEmpty(tofus);
      
      finalOrders = FOREACH ikuraTofuOrders GENERATE ORDER_ID;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多