猪 - 使用三元条件过滤根据不同的条件 [英] Pig - use ternary condition to filter based on different condition
问题描述
我试图使用PIG来过滤使用三元条件的当前星期几的关系,但它给了我一个我还没有看到的错误。
这是我想要做的:
C =过滤器B by(DaysBetween(CurrentTime() ,ToDate(0L))%7)==(long)0? B.interval =='daily':B.interval =='weekly';
,返回的错误是:
<$猪脚本解析失败:NoViableAltException(84 @ [])
解析失败:猪脚本解析失败:NoViableAltException(84 @ [] )
at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:196)
at org.apache.pig.PigServer $ Graph.validateQuery(PigServer.java:1684)
在org.apache.pig.PigServer $ Graph.registerQuery(PigServer.java:1657)
在org.apache.pig.PigServer.registerQuery(PigServer.java:600)
在org.apache。 pig.tools.grunt.GruntParser.processPig(GruntParser.java:1069)
在org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:501)
。在组织。 apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:228)
在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:203)
。在组织。 apache.pig.tools.grunt.Grunt.run(Grunt.java:66)
org。 apache.pig.Main.run(Main.java:542)
at org.apache.pig.Main.main(Main.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method )
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
处的java.lang.reflect sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
。 Method.invoke(Method.java:483)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
引起:NoViableAltException(84 @ [])
在org.apache.pig.parser.AstValidator.expr(AstValidator.java:8637)
at org.apache.pig.parser.AstValidator.expr(AstValidator.java:9115)
at org。在org.apache.pig.parser.AstValidator.projectable_expr apache.pig.parser.AstValidator.bin_expr(AstValidator.java:10531)
(AstValidator.java:9790)
。在org.apache.pig。 parser.AstValidator.var_expr(AstValidator.java:9582)
at org.apache.pig.parser.AstValidator.expr(AstValidator.java:8985)
在org.apache.pig.parser.AstValidator.cond(AstValidator.java:7820)
在org.apache.pig.parser.AstValidator.filter_clause(AstValidator.java:7328)
在org.apache .pig.parser.AstValidator.op_clause(AstValidator.java:1683)
处org.apache.pig.parser org.apache.pig.parser.AstValidator.general_statement(AstValidator.java:1035)
.AstValidator.statement(AstValidator.java:499)
处org.apache.pig.parser.QueryParserDriver.validateAst org.apache.pig.parser.AstValidator.query(AstValidator.java:373)
(QueryParserDriver.java:255)
at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:183)
... 15 more
有谁知道为什么它不工作?我在Mac上使用0.11。
谢谢。
$ b 编辑:我试图不使用UDF我已经在其他关系中使用了三元条件。
我想通了。这是正确的方式:
C =过滤器B由(((DaysBetween(CurrentTime(),ToDate(0L))%7)== 4)'daily':'weekly')== interval;
I'm trying to use PIG to filter a relation based on the current day of the week using a ternary condition but it's giving me an error that I haven't seen yet.
This is what I'm trying to do:
C = filter B by (DaysBetween(CurrentTime(),ToDate(0L)) % 7) == (long)0 ? B.interval == 'daily' : B.interval == 'weekly';
and the error that returns is:
ERROR 1200: Pig script failed to parse: NoViableAltException(84@[])
Failed to parse: Pig script failed to parse: NoViableAltException(84@[])
at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:196)
at org.apache.pig.PigServer$Graph.validateQuery(PigServer.java:1684)
at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1657)
at org.apache.pig.PigServer.registerQuery(PigServer.java:600)
at org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:1069)
at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:501)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:228)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:203)
at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:66)
at org.apache.pig.Main.run(Main.java:542)
at org.apache.pig.Main.main(Main.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: NoViableAltException(84@[])
at org.apache.pig.parser.AstValidator.expr(AstValidator.java:8637)
at org.apache.pig.parser.AstValidator.expr(AstValidator.java:9115)
at org.apache.pig.parser.AstValidator.bin_expr(AstValidator.java:10531)
at org.apache.pig.parser.AstValidator.projectable_expr(AstValidator.java:9790)
at org.apache.pig.parser.AstValidator.var_expr(AstValidator.java:9582)
at org.apache.pig.parser.AstValidator.expr(AstValidator.java:8985)
at org.apache.pig.parser.AstValidator.cond(AstValidator.java:7820)
at org.apache.pig.parser.AstValidator.filter_clause(AstValidator.java:7328)
at org.apache.pig.parser.AstValidator.op_clause(AstValidator.java:1683)
at org.apache.pig.parser.AstValidator.general_statement(AstValidator.java:1035)
at org.apache.pig.parser.AstValidator.statement(AstValidator.java:499)
at org.apache.pig.parser.AstValidator.query(AstValidator.java:373)
at org.apache.pig.parser.QueryParserDriver.validateAst(QueryParserDriver.java:255)
at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:183)
... 15 more
Does anyone have any idea why it's not working? I'm using 0.11 on my Mac.
Thanks.
EDIT: I was trying not to use UDF and I have used ternary conditions in other relations.
I figured it out. It was just badly constructed.
This is the correct way:
C = filter B by (((DaysBetween(CurrentTime(),ToDate(0L)) % 7) == 4) ? 'daily' : 'weekly') == interval;
这篇关于猪 - 使用三元条件过滤根据不同的条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!