猪错误:无法解析查询

时间:2017-10-11 05:14:49

标签: java hadoop mapreduce apache-pig grunt-shell

我正在尝试编写一个过滤器UDF,它将输入作为Tuple,并返回元组,但是当我在Gruntt shell中定义函数时,我收到错误消息,因为无法解析,我在这里做错了

 REGISTER /home/filterUDF.jar;

 DEFINE filDist  'FilterDistrictUdf/FilterDistrict' 


package FilterDistrictUdf;

import java.io.IOException;

import org.apache.pig.FilterFunc;

import org.apache.pig.data.Tuple;


public class FilterDistrict extends FilterFunc{

@Override
public Boolean exec(Tuple input) throws IOException {
    String line = input.toString();
    String[] columns = line.split(",");
    Double bplObjective = Double.parseDouble(columns[2]);
    Double bplPerformance = Double.parseDouble(columns[10]);



    //Double bplObjective = (Double )input.get(2);
    //Double bplPerformance = (Double )input.get(10);
    //BigInteger mul = new BigInteger("80");
    //BigInteger div = new BigInteger("100");

    if(bplPerformance >= ( (bplObjective* 80)/100) )
        return true;
    else
        return false;


}

}

错误:

  ERROR 1200: <line 40, column 15>  Syntax error, unexpected symbol at or 
  near ''FilterDistrictUdf/FilterDistrict''

  Failed to parse: <line 40, column 15>  Syntax error, unexpected symbol at 
  or near ''FilterDistrictUdf/FilterDistrict''
   at 

  org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:244)
   at 
  org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:182)
   at org.apache.pig.PigServer$Graph.validateQuery(PigServer.java:1707)
   at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1680)
   at org.apache.pig.PigServer.registerQuery(PigServer.java:623)
   at 
   org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:1063)
   at 

org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:501)     在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230)     在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205)     在org.apache.pig.tools.grunt.Grunt.run(Grunt.java:66)     在org.apache.pig.Main.run(Main.java:558)     在org.apache.pig.Main.main(Main.java:170)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     在

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)         在

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja       VA:43)          在java.lang.reflect.Method.invoke(Method.java:497)             在org.apache.hadoop.util.RunJar.main(RunJar.java:212)

1 个答案:

答案 0 :(得分:0)

当我试图

时,错误即将来临
   DEFINE filDist  'FilterDistrictUdf/FilterDistrict' 

而不是定义temporay函数filDist,尝试直接在filter运算符中使用函数

    chk1 = FILTER elements by FilterDistrictUdf.FilterDistrict(*)

它运作正常