pig-无法计算limit表达式:null

0wi1tuuw  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(656)

我试图在基于列的关系中动态限制包中的元组数。
所以,这就是我要做的:

--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,在极限运算中可以用常数。
我也试过了

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;

但什么都没用。
请帮忙。谢谢。

vs3odd8k

vs3odd8k1#

pig文档清楚地表明,不能使用带有限制运算符的输入关系中的任何列。它应该是常量或标量。在您的例子中,您使用的是cnt,它是输入关系中的一列。

相关问题