如何在Pig中编写函数?

时间:2015-05-14 23:01:48

标签: apache-pig

猪新手在这里。我的关系A包含多个字段(f1f2 ...)。我想快速查看每个字段中的所有不同值。

现在,我这样做:

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

我不想为每个领域做这件事。它太复杂了。是否可以在Pig中编写某种函数来执行此操作。我在文档中查看了UDF,但我不想切换到Java或Python等其他语言。我认为猪对我正在做的事情很好。

2 个答案:

答案 0 :(得分:4)

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

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 命令。

答案 1 :(得分:1)

值得考虑的想法......

如果在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;