如何在 PIG 中的 foreach
中实现以下目标:
REL = foreach RELS {
if ( cnt == 0 )
limited_result = NULL/Empty;
else
limited_result = LIMIT results cnt ;
generate limited_result.some_field;
}
我不能使用 LIMIT
,因为它会验证“cnt”是否大于 0;
我尝试使用 SPLIT
,但显然它在 foreach
中不受支持。
最佳答案
在 FOREACH
之前 FILTER
怎么样?
REL = foreach (filter RELS by cnt > 0) {
limited_result = LIMIT results cnt ;
generate limited_result.some_field;
}
如果还需要cnt
为0的记录,可以先SPLIT
,然后在cnt
为0时生成一个空包:
split RELS into ZERO if cnt == 0, NONZERO if cnt > 0;
NZ_LIM = foreach NONZERO {
result = LIMIT results cnt ;
generate limited_result.some_field;
}
Z_LIM = foreach ZERO generate {} as some_field;
REL = union NZ_LIM, Z_LIM;
关于hadoop - Apache PIG : apply LIMIT only if parameter is > 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465632/