我是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
答案 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)