Apache pig 用于验证的Pig查询

Apache pig 用于验证的Pig查询,apache-pig,Apache Pig,我对PIG还不熟悉,正在尝试根据需要转换一些数据。我有两个输入文件。 首先是type.txt CusId TypeId 100 100 101 100 102100 103 103 104 103 现在,相同的typeId意味着客户是相同的。这里它意味着100、102和104基本上是相同的客户 我有另一个表(gender.txt),它存储CustomerId及其各自的性别(M/F) 尖刻的性别 100米 101米 102 F 103米 104米 现在,这个表意味着相同的客户100、102和104

我对PIG还不熟悉,正在尝试根据需要转换一些数据。我有两个输入文件。 首先是type.txt

CusId TypeId
100 100
101 100
102100
103 103
104 103

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

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

尖刻的性别
100米
101米
102 F
103米
104米

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

客户ID类型ID性别

100 1米
102 1F

104 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)

按cusid加入,按cusid typeid分组,计算每组不同性别的数量,筛选出少于2个的组。剩下的应该就是你要找的了。我刚开始试着加载type.txt。将“type.txt”加载为(CusId:int,TypeId:int);然后我尝试按TypeId对文件进行分组。分组=按(类型ID)分组数据。现在,在这之后,我得到的输出是1{100102104)2{101}3{103}。因此,我不知道如何筛选并获得问题中提到的输出。嗨,Fred,谢谢你的评论。但是表格太大了。大约有30亿行。此外,我无法获得你提到的group by cusId typeid的第二条评论。比如,在加入I之后,groupby cusId,typeid的输出会是什么s done.3亿不是很小,但应该可以用pig来实现。当然,从一个样本数据集开始。我们可以优化你提到的下面的查询吗?还有,我有一个问题,如果我们有很多关系,比如a、B、C、D…直到我。还有,GROUP by是否引入了一个新的reduce jobHi Fred,我尝试了using您的解决方案。但是,我看到了一些问题。如果有10个客户具有相同的typeId,即如果有10个重复的客户,我看到mapreduce日志只转储2或3行。是否有可能在不同的位置转储相同的typeId行?但即使如此,如果我转储数据集,按typeId排序,它缺少某些行。请先将I存储到某个文件(而不是转储).你丢失记录的模式是什么?你能举个例子吗?哦,也许我知道了。我认为第二个文件没有第一个文件中的所有CustomerID。因此,加入后,只剩下普通CustomerID,而不是第一个文件中的所有CustomerID。嗨,Fred,我还有一个问题(扩展至本条例)。我无法确定这是否可以用Pig完成,或者我需要在这里使用UDF。在每个TypeId的第一个表中,可以有多个customerId,但其中一个customerId与TypeId相同,这意味着原始客户。该客户的性别将是真实和正确的性别。现在,我想知道,还有多少其他客户对于相同的typeId,具有不同性别但相同类型ID(即相同的客户)的MER。也就是说,我想计算出每个typeId的数据。我修改了type.txt以准确描述问题。