清管器过滤器不工作

cdmah0mi  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(476)

有人对清管器过滤器工作不正常有问题吗。而且通常表现得傻乎乎的。
例如,我有一些类似这样的日志。

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,如果数字匹配,它将返回“yes”或“no”。

@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运行更多的数据转换。这些自定义项对列$2没有任何作用。他们只看第1栏和第3栏。当我在过滤器之前使用它们时,这两个自定义项都可以工作。但是,如果尝试在筛选器之后应用UDF,则会出现“无法打开别名”错误。另外,如果我在过滤器之前执行额外的自定义项,然后应用过滤器,过滤器就会停止工作,并出现“无法打开别名”错误。同样,这些根本不会改变$2的模式。
那么,这里可能发生了什么?第一,为什么过滤器最初不起作用。第二,为什么某些自定义项工作,然后不工作,似乎没有逻辑。任何类型的故障排除指导都会有帮助。

xdnvmnnf

xdnvmnnf1#

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

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

相关问题