有没有人有Pig过滤器无法正常工作的问题。而且一般都表现得很傻。
例如,我有一些看起来像这样的日志。
a1
(2013-12-25 02:55:08,000085594,15468,80365991,1387940111723)
(2013-12-25 02:55:08,000085594,63943,80365991,1387940111723)
(2013-12-25 02:55:08,000085594,64014,80365991,1387940111723)
decribe a1
a1: {time:chararray, id:chararray, buckets::bucket: int, chararray, chararray)
如果我尝试过滤2美元。我收到了错误。
a2 = filter a2 by ($2 == 64034);
我收到以下错误。错误1066:无法打开别名a2的迭代器。
我搞砸了很多,并没有想出来。所以,如果数字匹配,我错误地返回“是”或“否”的Python UDF。
@outputSchema('y:chararray')
def bucket(bucket):
if bucket == '64034':
return "Yes"
else:
return "No"
a3 = foreach a1 generate time, myfuncs.bucket($2), $3, $4;
describe a3
a3: {time:chararray, id:chararray, y:chararray, chararray, cararray}
没有,当我过滤它是有效的。
a4 = filter a3 by ($2 == 'Yes');
这产生了期望的结果。但是,我需要与其他UDF一起运行几个数据转换。这些UDF对$ 2列没有任何作用。他们只看$ 1和$ 3栏。当我在过滤器之前使用它们时,两个UDF都可以工作。但是,如果我尝试在过滤器后应用UDF,则会出现“无法打开别名”错误。此外,如果我在过滤器之前执行其他UDF然后应用过滤器 - 过滤器停止工作,我得到“无法打开别名”错误。同样,这些都不会改变$ 2的架构。
那么,有什么可能发生在这里?一,为什么过滤器最初不起作用。二,为什么某些UDF工作,然后看似没有逻辑。任何类型的故障排除方向都会有所帮助。
答案 0 :(得分:1)
似乎还没有定义a2。更有可能的是,代码应该如下:
a2 = filter a1 by ($2 == 64034);