PIG输出查询,用于根据groupby子句选择特定值

时间:2016-05-20 20:16:46

标签: apache-pig

我有一个包含以下数据的表:

cust_id, acct_no, ind
123111,  1233,     Y
123111,  2311,     N
222111,  1112,     N
222111,  2111,     N

我必须得到cust_id, 1的输出(如果该客户下的任何一个字段为Y,则为二进制指示符)

所以从上表我必须得到低于输出。

123111    1
222111    0

1 个答案:

答案 0 :(得分:0)

加载数据和foreach行检查ind值是否为'Y'然后为该行返回1,否则返回0.最后区别于行。

编辑:

--A = LOAD 'data.txt' USING PigStorage(',') as (cust_id:int,acct_no:int,ind:chararray);
-- Note: I am only loading two columns

A = LOAD 'data.txt' USING PigStorage(',') AS (id:int,ind:chararray);
B1 = FILTER A BY (ind == 'Y');
B2 = FILTER A BY (ind == 'N');
B3 = DISTINCT B2;
C = JOIN B3 BY id LEFT OUTER,B1 by id;
D = FOREACH C GENERATE B3::id as id,(B1::ind== 'Y'? 1 : 0) as ind;
E = FOREACH D GENERATE id,((ind IS NULL) ? 0 : ind);
DUMP E;

<强>输出

enter image description here

这是一个包含更大数据集的示例

<强> INPUT

123111,Y
123111,N
222111,N
222111,N
333111,Y
333111,N
444111,Y
444111,N
555111,N
555111,N

<强>输出

enter image description here