pig:可以在列表中的变量上写一个循环吗?

gjmwrych  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(235)

我必须在一个列表中循环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次?
谢谢!

btqmn9zl

btqmn9zl1#

我想你要找的是Pig
为您的30个变量创建一个关系,并通过foreach对它们进行迭代,然后调用一个宏,该宏将获得2个参数:您的数据关系和您想要分组的var。只需检查链接中的示例宏与您希望执行的操作非常相似。
更新代码(&C)
下面是您可以使用的宏:

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什么包含的文件名不正确(为此创建一个自定义项总是有效的。)让我想想。但这个宏的工作原理是,如果您按所有要分组的文件名调用。

相关问题