Pig - 无法评估Limit表达式:NULL

时间:2015-01-13 23:19:32

标签: apache-pig limit

我试图根据列动态限制关系中包中元组的数量。

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

--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;

但没有任何效果。

请帮忙。 感谢。

1 个答案:

答案 0 :(得分:1)

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