Uploaded image for project: 'Pig'
  1. Pig
  2. PIG-4756

Groovy algebraic UDF only works when return type is long

    XMLWordPrintableJSON

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.

      Attachments

        1. PIG-4756-0.patch
          9 kB
          Daniel Dai

        Activity

          People

            daijy Daniel Dai
            daijy Daniel Dai
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: