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。
我正在尝试基于列动态限制关系内包中元组的数量。
所以,这就是我想要做的:
--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。