Hi,
I'm having trouble when trying to filter by a field that is defined as long
and my desired value is also long.
For example:
traffic = load 'traffic.txt' as (domain:chararray, subnet:long);
r = filter traffic by subnet == 3521878016;
Will result in:
ERROR 2999: Unexpected internal error. For input string: "3521878016"
java.lang.NumberFormatException: For input string: "3521878016"
at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:459)
at java.lang.Integer.parseInt(Integer.java:497)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.AtomDatum(QueryParser.java:5713)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.Const(QueryParser.java:5827)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.BaseEvalSpec(QueryParser.java:4058)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.UnaryExpr(QueryParser.java:3964)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.CastExpr(QueryParser.java:3918)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.MultiplicativeExpr(QueryParser.java:3827)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.AdditiveExpr(QueryParser.java:3753)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.InfixExpr(QueryParser.java:3719)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.PUnaryCond(QueryParser.java:1506)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.PAndCond(QueryParser.java:1440)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.POrCond(QueryParser.java:1384)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.PCond(QueryParser.java:1350)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.FilterClause(QueryParser.java:1260)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.BaseExpr(QueryParser.java:992)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.Expr(QueryParser.java:802)
at
org.apache.pig.impl.logicalLayer.parser.QueryParser.Parse(QueryParser.java:595)
at
org.apache.pig.impl.logicalLayer.LogicalPlanBuilder.parse(LogicalPlanBuilder.java:60)
at org.apache.pig.PigServer.parseQuery(PigServer.java:310)
at org.apache.pig.PigServer.registerQuery(PigServer.java:276)
at
org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:520)
at
org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:264)
at
org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:98)
at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69)
at org.apache.pig.Main.main(Main.java:311)
I understand that pig tries to parse the number to int and fails because
it's too big (and hence the long definition). In order to avoid this I can
cast the long field to chararray and do a string comparison, but I think pig
should be able to figure this out from the field type, or at least do
parseLong instead of pasrsInt (it doesn't heart - I think ...).
What do you think ?