相当于猪中的 Union_map
Equivalent of Union_map in pig
我一直在努力寻找猪身上的 union_map() 等价物。我确定 TOMAP 函数会引入 MAP 数据类型。
但要求是为给定 ID 带来所有 MAP,如下所示。
select I1,UNION_MAP(MAP(Key,Val)) as new_val group by I1;
示例输入和结果如下所示。
输入
ID,Key,Val
ID1,K1,V1
ID2,K1,V2
ID2,K3,V3
ID1,K2,V4
ID1,K1,V7
从 table 组中按 ID 选择 ID,UNION_MAP(TO_MAP(Key,VAL));
结果
ID1,(K1#V7,K2#V4)
ID2,(K1#V2,K3#V3)
我想在 pig 中获得类似的输出。
从此 link http://www.java2s.com/Code/Jar/p/Downloadpiggybankjar.htm 下载 piggybank.jar
并将其设置在您的类路径中并尝试以下方法。
输入
ID1,K1,V1
ID2,K1,V2
ID2,K3,V3
ID1,K2,V4
ID1,K1,V7
PigScript:
REGISTER '/tmp/piggybank.jar';
A = LOAD 'input' USING PigStorage(',') AS (ID:chararray,Key:chararray,Val:chararray);
B = RANK A;
C = GROUP B BY (ID,Key);
D = FOREACH C {
sortByRank = ORDER B BY rank_A DESC;
top1 = LIMIT sortByRank 1;
GENERATE FLATTEN(top1);
}
E = GROUP D BY top1::ID;
F = FOREACH E {
ToMap = FOREACH D GENERATE TOMAP(top1::Key,top1::Val);
GENERATE group,BagToTuple(ToMap) AS myMap;
}
DUMP F;
输出:
(ID1,([K1#V7],[K2#V4]))
(ID2,([K1#V2],[K3#V3]))
我一直在努力寻找猪身上的 union_map() 等价物。我确定 TOMAP 函数会引入 MAP 数据类型。
但要求是为给定 ID 带来所有 MAP,如下所示。
select I1,UNION_MAP(MAP(Key,Val)) as new_val group by I1;
示例输入和结果如下所示。
输入
ID,Key,Val
ID1,K1,V1
ID2,K1,V2
ID2,K3,V3
ID1,K2,V4
ID1,K1,V7
从 table 组中按 ID 选择 ID,UNION_MAP(TO_MAP(Key,VAL));
结果
ID1,(K1#V7,K2#V4)
ID2,(K1#V2,K3#V3)
我想在 pig 中获得类似的输出。
从此 link http://www.java2s.com/Code/Jar/p/Downloadpiggybankjar.htm 下载 piggybank.jar
并将其设置在您的类路径中并尝试以下方法。
输入
ID1,K1,V1
ID2,K1,V2
ID2,K3,V3
ID1,K2,V4
ID1,K1,V7
PigScript:
REGISTER '/tmp/piggybank.jar';
A = LOAD 'input' USING PigStorage(',') AS (ID:chararray,Key:chararray,Val:chararray);
B = RANK A;
C = GROUP B BY (ID,Key);
D = FOREACH C {
sortByRank = ORDER B BY rank_A DESC;
top1 = LIMIT sortByRank 1;
GENERATE FLATTEN(top1);
}
E = GROUP D BY top1::ID;
F = FOREACH E {
ToMap = FOREACH D GENERATE TOMAP(top1::Key,top1::Val);
GENERATE group,BagToTuple(ToMap) AS myMap;
}
DUMP F;
输出:
(ID1,([K1#V7],[K2#V4]))
(ID2,([K1#V2],[K3#V3]))