我需要从 PIG HADOOP 的同一列中过滤 2 个条件

Posted

技术标签:

【中文标题】我需要从 PIG HADOOP 的同一列中过滤 2 个条件【英文标题】:I need to filter 2 conditions from the same column in PIG HADOOP 【发布时间】: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 中。

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

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于我需要从 PIG HADOOP 的同一列中过滤 2 个条件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hadoop 配置猪关系

Hadoop Pig - 删除 csv 标头

如何使用 apache pig 在 hadoop 集群上加载文件?

从 ozzie hadoop 运行 install pig

在 Pig 中过滤

Java UDF on Hadoop 输入参数——从 Pig on Hadoop 调用