我想在FOREACH的帮助下在猪身上产生组合。有没有办法做到这一点?
My Input:
A
B
C
Objective:
A,B
A,C
B,C
这是我尝试过的样本。此示例显示"语法错误,意外符号位于或附近' $ 0' "。
A = load '/test';
B = foreach A generate $0;
Combination = Cross A, B;
Combination_Filter = foreach Combination generate $0 < $1;
请帮我解决这个问题。在此先感谢
答案 0 :(得分:3)
您可以尝试以下选项吗?
<强>输入强>
A
B
C
<强>选项1:强>
A = LOAD 'input' AS(f1:chararray);
B = LOAD 'input' AS(f2:chararray);
C = CROSS A,B;
D = FILTER C BY A::f1 < B::f2;
DUMP D;
<强>选项2:强>
A = LOAD 'input' AS (f1:chararray);
B = FOREACH A GENERATE f1 AS (f2:chararray);
C = CROSS A,B;
D = FILTER C BY A::f1 < B::f2;
DUMP D;
<强>输出:强>
(A,B)
(A,C)
(B,C)
答案 1 :(得分:1)
仅使用foreach
是不可能做到的,实现类似事情的唯一方法是使用Sivasakthi的答案,或者使用自定义UDF。您可以将所有寄存器放在包含group all
的包中,然后运行UDF。
UDF在另一个问题中:How to turn (A, B, C) into (AB, AC, BC) with Pig?
代码如下:
A = load '/test';
A_grouped = group A all;
A_combinations = foreach A_grouped generate CombinationsUDF(A);