我有一个包含以下数据的表:
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
答案 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;
<强>输出强>
这是一个包含更大数据集的示例
<强> INPUT 强>
123111,Y
123111,N
222111,N
222111,N
333111,Y
333111,N
444111,Y
444111,N
555111,N
555111,N
<强>输出强>