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

问题描述 投票:0回答:2

我是猪的新手。

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

例如

产品表

产品名称
豆腐
井仓
寿司

订购表

订单号 产品名称
123 井仓
124 井仓
124 豆腐
125 寿司
126 豆腐
127 豆腐

我想要实现的是 |订单编号 |产品名称 | |:---:|:--:| |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
2个回答
0
投票

要获取同时包含“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;



0
投票
OR

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

© www.soinside.com 2019 - 2024. All rights reserved.