在Pig中使用FOREACH的组合

时间:2015-05-07 05:34:28

标签: apache-pig combinations

我想在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;

请帮我解决这个问题。在此先感谢

2 个答案:

答案 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);