我必须循环列表中的 30 多个变量
[var1,var2, ... , var30]
对于每个变量,我使用一些 PIG group by
语句,例如
grouped = GROUP data by var1;
data_var1 = FOREACH grouped{
GENERATE group as mygroup,
COUNT(data) as count;
};
有没有办法遍历变量列表,或者我被迫在我的代码中手动重复上面的代码 30 次?
谢谢!
最佳答案
我认为您正在寻找的是 pig macro
为您的 30 个变量创建一个关系,并通过 foreach 对它们进行迭代,并调用一个获取 2 个参数的宏:您的数据关系和您要分组的变量。 只需检查链接中的示例,宏与您想要执行的操作非常相似。
更新和代码
下面是您可以使用的宏:
DEFINE my_cnt(data, group_field) RETURNS C {
$C = FOREACH (GROUP $data by $group_field) GENERATE
group AS mygroup,
COUNT($data) AS count;
};
使用宏:
IMPORT 'cnt.macro';
data = LOAD 'data.txt' USING PigStorage(',') AS (field:chararray, value:chararray);
DESCRIBE data;
e = my_cnt(data,'the_field_you_group_by');
DESCRIBE e;
DUMP e;
我仍在考虑如何遍历要分组的字段。我最初的建议是通过包含归档名称的关系进行 foreach 不正确。 (为此创建一个 UDF 总是可行的。)让我考虑一下。 但是,如果您调用要分组的所有文件名,此宏将按原样工作。
关于hadoop - pig : is it possible to write a loop over variables in a list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37029980/