猪:旋转和求和 3 关系
Pig: Pivoting & Sum 3 relations
我有 3 种不同的关系,如下所述,我可以使用 UDF 获得输出,但在 PIG 中寻找实现。在论坛中提到了其他东西,但没有对这个问题有具体的想法。
过程:
FN1,10
FN2,20
FN3,23
FN4,25
FN5,15
FN7,40
FN10,56
拒绝:
FN1,12
FN2,13
FN3,33
FN6,60
FN8,23
FN9,44
FN10,4
全部FN:
FN1
FN2
FN3
FN4
FN5
FN6
FN7
FN8
FN9
FN10
所需的输出是:
FN1,10,12,22
FN2,20,13,33
FN3,23,33,56
FN4,25,0,25
FN5,15,0,15
FN6,0,60,60
FN7,40,0,40
FN8,0,23,23
FN9,0,44,44
FN10,56,4,60
您可以使用 COGROUP 来实现此目的
假设你的关系在 test.txt test2.txt 和 test3.txt
A = LOAD 'test.txt' using PigStorage(',');
B = LOAD 'test2.txt' using PigStorage(',');
C = LOAD 'test3.txt' using PigStorage(',');
D = COGROUP A by [=10=], B by [=10=];
E = COGROUP C by [=10=], D by [=10=];
F = FOREACH E generate [=10=], FLATTEN(D.A), FLATTEN(D.B);
G = FOREACH F generate [=10=], ., .;
H = FOREACH G generate [=10=], FLATTEN((IsEmpty()?null:)), FLATTEN((IsEmpty()?null:));
I = foreach H generate [=10=], ( is null?0:),( is null?0:),( is null?0:)+( is null?[=10=]:);
dump I;
输出
(FN1,10,12,22)
(FN2,20,13,33)
(FN3,23,33,56)
(FN4,25,0,)
(FN5,15,0,)
(FN6,0,60,60)
(FN7,40,0,)
(FN8,0,23,23)
(FN9,0,44,44)
(FN10,56,4,60)
我有 3 种不同的关系,如下所述,我可以使用 UDF 获得输出,但在 PIG 中寻找实现。在论坛中提到了其他东西,但没有对这个问题有具体的想法。
过程:
FN1,10
FN2,20
FN3,23
FN4,25
FN5,15
FN7,40
FN10,56
拒绝:
FN1,12
FN2,13
FN3,33
FN6,60
FN8,23
FN9,44
FN10,4
全部FN:
FN1
FN2
FN3
FN4
FN5
FN6
FN7
FN8
FN9
FN10
所需的输出是:
FN1,10,12,22
FN2,20,13,33
FN3,23,33,56
FN4,25,0,25
FN5,15,0,15
FN6,0,60,60
FN7,40,0,40
FN8,0,23,23
FN9,0,44,44
FN10,56,4,60
您可以使用 COGROUP 来实现此目的
假设你的关系在 test.txt test2.txt 和 test3.txt
A = LOAD 'test.txt' using PigStorage(',');
B = LOAD 'test2.txt' using PigStorage(',');
C = LOAD 'test3.txt' using PigStorage(',');
D = COGROUP A by [=10=], B by [=10=];
E = COGROUP C by [=10=], D by [=10=];
F = FOREACH E generate [=10=], FLATTEN(D.A), FLATTEN(D.B);
G = FOREACH F generate [=10=], ., .;
H = FOREACH G generate [=10=], FLATTEN((IsEmpty()?null:)), FLATTEN((IsEmpty()?null:));
I = foreach H generate [=10=], ( is null?0:),( is null?0:),( is null?0:)+( is null?[=10=]:);
dump I;
输出
(FN1,10,12,22)
(FN2,20,13,33)
(FN3,23,33,56)
(FN4,25,0,)
(FN5,15,0,)
(FN6,0,60,60)
(FN7,40,0,)
(FN8,0,23,23)
(FN9,0,44,44)
(FN10,56,4,60)