2017-10-11 3 views
1

Ich versuche, ein Filter UDF schreiben, die Eingabe als Tuple nehmen wird, und Tupel zurückgeben, aber wenn ich die Funktion in Gruntt Shell DEFINE bekomme ich die Fehlermeldung msg als fehlgeschlagen zu analysieren, wo ich es tue hier falschPig Fehler: Parsing Abfrage fehlgeschlagen

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; 


} 

}

Fehler:

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) bei org.apache.pig.tools.grunt.GruntParser.parseStopOnError (GruntParser.java:230) bei org.apache.pig.tools.grunt.GruntParser.parseStopOnError (GruntParser.java:205) bei org.apache. pig.tools.grunt.Grunt.run (Grunt.java:66) bei org.apache.pig.Main.run (Main.java:558) bei org.apache.pig.Main.main (Main.java: 170) bei sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) bei

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

sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMeth odAccessorImpl.ja va: 43) bei java.lang.reflect.Method.invoke (Method.java:497) bei org.apache.hadoop.util.RunJar.main (RunJar.java:212)

Antwort

0

der Fehler kommen würde, wenn ich zu versuchen, wurde

DEFINE filDist 'FilterDistrictUdf/FilterDistrict' 

Statt temporay Funktion filDist definieren, versucht die Funktion direkt in den Filteroperator als

chk1 = FILTER elements by FilterDistrictUdf.FilterDistrict(*) 

und es funktionierte richtig