如何在 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
这里是 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