如何使用PIG脚本

如何使用PIG脚本

问题描述:

我有表1与下面的模式来验证列表如何使用PIG脚本

{客户ID:INT,STOREID:INT,产品有:{(PRODID:INT,名称:chararray)}}

{:INT,客户ID:INT,名称:chararray UNIQUEID}

与下面的模式

客户名单

店铺列表与下面的模式

{UNIQUEID:INT,storeNum:INT,名称:chararray}与模式

和产品列表

{UNIQUEID:INT,SKU: int,productName:chararray}

现在我想搜索列表1中每个项目的customerId,storeId和prodId wi其他列表来检查ID是否有效。有效的项目必须存储在文件中,另一个项目中的项目无效。

由于PIG对我来说是非常新的,我觉得这很复杂。请给我一个很好的逻辑,使用Apache PIG来完成这项工作。

所有负载首先所有的数据认为这是桌子

cust_data = LOAD '\your\path\to\customer\data' USING PigStorage() as (uniqueId: int, customerId: int, name: chararray); 

store_data = LOAD '\your\path\to\store\data' USING PigStorage() as (uniqueId: int, storeNum: int, name: chararray); 

product_data = LOAD '\your\path\to\product\data' USING PigStorage() as (uniqueId: int, sku: int, productName: chararray); 

您可以通过

DESCRIBE cust_data; 
DESCRIBE store_data; 
DESCRIBE product_data; 

检查加载的数据架构联接先使用UNIQUEID客户和存储数据(我们正在做一个等联)

cust_store_join = JOIN cust_data BY uniqueId, store_data BY uniqueId; 

然后生成你的列

cust_store = FOREACH cust_store_join GENERATE cust_data::uniqueId as uniqueId, cust_data::customerId as customerId, cust_data::name as cust_name, store_data::storeNum as storeNum, store_data::name as store_name; 

现在就加入使用UNIQUEID客户存储和产品(我们正在做等值连接)

cust_store_product_join = JOIN cust_store BY uniqueId, product_data BY uniqueId; 

最后生成所有所需的列

customer_store_product = FOREACH cust_store_product_join GENERATE cust_store::uniqueId as uniqueId, cust_store::customerId as customerId, cust_store::cust_name as cust_name, cust_store::storeNum as storeNum, product_data::sku as sku, product_data::productName as productName; 

现在存储在本地所需的列/ hdfs目录 下面的存储命令将存储来自所有三个表的所有匹配uniqueId,即客户,商店,产品

STORE customer_store_product INTO '\your\output\path' USING PigStorage(','); 

同样,您可以加入您的list1架构并使用相同的逻辑生成列和存储数据。 希望这会有所帮助