如何在 Pig 中编写函数?

How to write a function in Pig?

这里是 Pig 新手。我有一个关系 A 与多个字段 (f1,f2...)。我想快速查看每个字段中的所有不同值。

现在,我正在这样做:

f1 = FOREACH A GENERATE f1;
f1 = DISTINCT f1;
dump f1;

我不想对每个字段都这样做。它太复杂了。是否可以在 Pig 中编写某种函数来执行此操作。我查看了文档中的 UDF,但我不想切换到另一种语言,如 Java 或 Python。我觉得 Pig 很适合我的工作。

一个值得思考的想法....

如果在 f1 中看到的值不会出现在 f2 中,那么您可以尝试这种方法。在这种情况下,我们只执行一次 DISTINCT。

   f1  = FOREACH A GENERATE f1;
   f2  = FOREACH A GENERATE f2;
   ...
   f10 = FOREACH A GENERATE f10;

   all_values = UNION f1,f2,..., f10;

   uniq_values = DISTINCT all_values;
   DUMP uniq_values;

您要查找的是 。这相当于一个函数。

DEFINE MY_MACRO(relation,field) RETURNS selected_field_distinct {
    selected_field = FOREACH $relation GENERATE $field;
    $selected_field_distinct = DISTINCT selected_field;
};


A = LOAD 'input.txt' USING PigStorage(',') AS (f1:chararray, f2:chararray);

F1 = MY_MACRO(A,'f1');
F2 = MY_MACRO(A,'f2');

DUMP F1
DUMP F2

请注意:

  • 您必须在使用它的位置上方声明宏。
  • 您也可以在不同的文件上编写宏并将其导入脚本。
  • 无法在宏 as described here.
  • 中使用命令 DUMP