Apache Pig:ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200:无法向后查看此流中的多个令牌

时间:2015-06-19 17:14:02

标签: apache-pig

我写了一个返回字符串的UDF,这是一个示例代码:

split data into purchased IF ((boolean) (myudf(param)), failed OTHERWISE;

举个例子,这是我的udf返回的例子:

split data into purchased IF ((boolean) (retcode == 'SUCCESS')), failed OTHERWISE;

不幸的是。我收到以下错误:

Apache Pig: ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: can't look backwards more than one token in this stream

我也试过这个:

split data into purchased IF ((boolean) '(retcode == 'SUCCESS')'), failed OTHERWISE;

我收到此错误:

2015-06-19 10:10:48,330 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 11, column 85>  Syntax error, unexpected symbol at or near '250.00'

我也试过这个:

split data into purchased IF ((boolean) '(retcode == \'SUCCESS\')'), failed OTHERWISE;

我没有收到任何错误,但是我没有得到预期的结果。 任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

抛出该错误是因为ANTLR无法正确解析该句子。猪应该给你一个不同的错误,显示问题是什么,就像它通常那样,但似乎SPLIT句子的解析规则没有考虑到你试图施放条件时会发生什么。

只需将演员表移至boolean

即可解决此问题
split data into purchased IF (retcode == 'SUCCESS'), failed OTHERWISE;

那会有效。

为什么演员会让它失败?我不知道。我想将表达式的输出转换为两个不同的表达式,因为它必须解析内部表达式以便随后应用强制转换,并且split运算符的语法规则不允许这样做。 0%肯定。