猪过滤器不工作

时间:2014-10-07 17:11:15

标签: python-2.7 hadoop apache-pig

有没有人有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工作,然后看似没有逻辑。任何类型的故障排除方向都会有所帮助。

1 个答案:

答案 0 :(得分:1)

似乎还没有定义a2。更有可能的是,代码应该如下:

a2 = filter a1 by ($2 == 64034);