我需要从 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 个条件的主要内容,如果未能解决你的问题,请参考以下文章