Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
Description
The following groovy UDF does not work:
import org.apache.pig.scripting.groovy.AlgebraicInitial; import org.apache.pig.scripting.groovy.AlgebraicIntermed; import org.apache.pig.scripting.groovy.AlgebraicFinal; import java.lang.Math; class GroovyUDFs { @AlgebraicInitial('max') public static Tuple initial(Tuple t) { return t[1].next(); } @AlgebraicIntermed('max') public static Tuple intermed(Tuple t) { double max = -1; for (Tuple inner: t[1]) { max = Math.max(max, inner[0]); } return [max]; } @AlgebraicFinal('max') public static double algFinal(Tuple t) { double max = -1; for (Tuple inner: t[1]) { max = Math.max(max, inner[0]); } return max; } }
Error message:
Caused by: java.lang.RuntimeException: could not instantiate 'org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc$DoubleGroovyAlgebraicEvalFunc$Final' with arguments 'null' at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:766) at org.apache.pig.EvalFunc.getReturnTypeFromSpec(EvalFunc.java:153) at org.apache.pig.EvalFunc.<init>(EvalFunc.java:144) at org.apache.pig.AccumulatorEvalFunc.<init>(AccumulatorEvalFunc.java:33) at org.apache.pig.AlgebraicEvalFunc.<init>(AlgebraicEvalFunc.java:82) at org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.<init>(GroovyAlgebraicEvalFunc.java:39) at org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc$DoubleGroovyAlgebraicEvalFunc.<init>(GroovyAlgebraicEvalFunc.java:199) ... 42 more Caused by: java.lang.InstantiationException: org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc$DoubleGroovyAlgebraicEvalFunc$Final at java.lang.Class.newInstance(Class.java:364) at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:736) ... 48 more
It works when the return type is long.