Pig查询验证

时间:2014-02-13 13:26:14

标签: apache-pig

我是PIG的新手,我正在尝试根据需要转换一些数据。我有两个输入文件。 首先是type.txt

CusId TypeId
100 100
101 100
102 100
103 103
104 103

现在,同样的typeId意味着客户是相同的。这意味着100,102和104基本上是相同的客户。

我有另一张表(gender.txt)存储CustomerId及其各自的性别(M / F)

CusId Sex
100 M
101 M
102 F
103 M
104 M

现在,该表意味着相同的客户100,102和104(通过第一个表)没有相同的性别。所以,这意味着表中的任何一个都包含错误的数据
所以,最后我希望我的输出以单个文本文件的形式组合,其中三列包含错误的数据

CustomerId TypeId Gender

100 1 M
102 1 F
104 1 M

1 个答案:

答案 0 :(得分:1)

这是一个可以让你前进的解决方案

A = LOAD 'type.txt' USING PigStorage(',') AS (CusId:chararray, TypeId:chararray);
B = LOAD 'gender.txt' USING PigStorage(',') AS (CusId:chararray, Sex:chararray);
C = JOIN A BY CusId, B BY CusId;
D = FOREACH C GENERATE A::CusId AS CusId, A::TypeId AS TypeId, B::Sex AS  Sex;
E = GROUP D BY (TypeId);
F = FOREACH E {X = D.Sex; Y = DISTINCT X; GENERATE D,COUNT(Y) AS numSex;};
G = FOREACH F GENERATE FLATTEN(D), numSex;
H = FILTER G BY numSex > 1;
I = FOREACH H GENERATE CusId, TypeId, Sex;
DUMP I

(102,1,F)
(100,1,M)
(104,1,M)