如何在列的子集上执行Pig Latin中的DISTINCT?

Fre*_*ots 13 apache-pig

我想对列的子集执行DISTINCT操作.该文件说,这是可能的一个嵌套的foreach:

您不能在字段子集上使用DISTINCT; 要执行此操作,请使用FOREACH和嵌套块首先选择字段,然后应用DISTINCT(请参阅示例:嵌套块).

在所有列上执行DISTINCT操作很简单:

A = LOAD 'data' AS (a1,a2,a3,a4);
A_unique = DISTINCT A;
Run Code Online (Sandbox Code Playgroud)

让我们说我有兴趣在a1,a2和a3中执行不同的操作.任何人都可以提供一个示例,说明如何使用文档中建议的嵌套foreach执行此操作吗?

以下是输入和预期输出的示例:

A = LOAD 'data' AS(a1,a2,a3,a4);
DUMP A;

(1 2 3 4)
(1 2 3 4)
(1 2 3 5)
(1 2 4 4)

-- insert DISTINCT operation on a1,a2,a3 here:
-- ...

DUMP A_unique;

(1 2 3 4)
(1 2 4 4)
Run Code Online (Sandbox Code Playgroud)

reo*_*toa 20

在所有其他列上进行分组,将感兴趣的列投影到一个包中,然后使用FLATTEN再次展开它们:

A_unique =
    FOREACH (GROUP A BY a4) {
        b = A.(a1,a2,a3);
        s = DISTINCT b;
        GENERATE FLATTEN(s), group AS a4;
    };
Run Code Online (Sandbox Code Playgroud)