猪新手在这里。我的关系A
包含多个字段(f1
,f2
...)。我想快速查看每个字段中的所有不同值。
现在,我这样做:
f1 = FOREACH A GENERATE f1;
f1 = DISTINCT f1;
dump f1;
我不想为每个领域做这件事。它太复杂了。是否可以在Pig中编写某种函数来执行此操作。我在文档中查看了UDF,但我不想切换到Java或Python等其他语言。我认为猪对我正在做的事情很好。
答案 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
请注意:
答案 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;