Pig - 无法评估限制表达式:NULL

Pig - Unable to evaluate Limit expression: NULL

我正在尝试基于列动态限制关系内包中元组的数量。

所以,这就是我想要做的:

--tmp_data: {user_id: bytearray, book: chararray, hotness: double,cnt: long}
grp2 = GROUP tmp_data BY (user_id,cnt);

final_data = FOREACH grp2 {
 sorted = order tmp_data by user_id asc,hotness desc;
 top1 = LIMIT sorted cnt;
 GENERATE FLATTEN(top1);
};

列 "cnt" 是我之前计算的要向用户显示的图书数量。所以我按用户分组并计数,我得到了

的分组关系
grp2: {group: (user_id: bytearray,cnt: long),tmp_data: {(user_id: bytearray,book: chararray,hotness: double,cnt: long)}}

这样我就可以根据每个用户的数量限制书籍的数量。

但由于某种原因,它不起作用。 它给了我这个奇怪的错误:

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias final_data. Backend error : org.apache.pig.backend.executionengine.ExecException: ERROR 0: Exception while executing [PORelationToExprProject (Name: RelationToExpressionProject[bag][*] - scope-19518 Operator Key: scope-19518) children: null at []]: java.lang.RuntimeException: Unable to evaluate Limit expression: NULL

如果我使用常量,它工作得很好,但它不像我上面描述的那样。 我正在使用 0.11,我读到我们可以在 LIMIT 操作中使用常量。

我也试过了

top1 = LIMIT sorted (int)cnt;
top1 = LIMIT sorted tmp_data.cnt;
top1 = LIMIT sorted tmp_data::cnt;
--and with no sorting
top1 = LIMIT tmp_data cnt;

但没有任何效果。

请帮忙。 谢谢

Pig 文档明确指出您不能将输入关系中的任何列与 LIMIT 运算符一起使用。它应该是常数或标量。在您的情况下,您使用的是输入关系中的一列 cnt。