如何使用PIG脚本
问题描述:
我有表1与下面的模式来验证列表如何使用PIG脚本
{:INT,客户ID:INT,名称:chararray UNIQUEID} 与下面的模式{客户ID:INT,STOREID:INT,产品有:{(PRODID:INT,名称:chararray)}}
客户名单
店铺列表与下面的模式
{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架构并使用相同的逻辑生成列和存储数据。 希望这会有所帮助