2014-10-07 283 views
1

有没有人有猪过滤器工作不正常的问题。一般都是愚蠢的。猪过滤器不工作

作为一个例子,我有一些看起来像这样的日志。

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的迭代器。

我搞砸了这个相当多的东西,couln't弄明白。因此,如果数字匹配,我错误地返回了“是”或“否”的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

对于谁发现这个职位寻找,当人们[错误1066:无法打开别名迭代器(http://stackoverflow.com/questions/34495085/error -1066-unable-to-open-iterator-for-alias-in-pig-generic-solution)这里是[通用解决方案](http://stackoverflow.com/a/34495086/983722)。 – 2015-12-28 15:17:28

回答

1

看起来像a2尚未定义。更有可能的是,代码应该如下:

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