Can you post the Hive query? What are the types of the parameters that
you passed to the function?

Zheng

On Wed, Feb 3, 2010 at 3:23 AM, Sonal Goyal <[email protected]> wrote:
> Hi,
>
> I am writing a UDAF which takes in 4 parameters. I have 2 cases - one where
> all the paramters are ints, and second where the last parameter is double. I
> wrote two evaluators for this, with iterate as
>
> public boolean iterate(int max, int groupBy, int attribute, int count)
>
> and
>
> public boolean iterate(int max, int groupBy, int attribute, double count)
>
> However, when I run a query, I get the exception:
> org.apache.hadoop.hive.ql.exec.AmbiguousMethodException: Ambiguous method
> for class org.apache.hadoop.hive.udaf.TopXPerGroup with [int, int, int, int]
>         at
> org.apache.hadoop.hive.ql.exec.DefaultUDAFEvaluatorResolver.getEvaluatorClass(DefaultUDAFEvaluatorResolver.java:83)
>         at
> org.apache.hadoop.hive.ql.udf.generic.GenericUDAFBridge.getEvaluator(GenericUDAFBridge.java:57)
>         at
> org.apache.hadoop.hive.ql.exec.FunctionRegistry.getGenericUDAFEvaluator(FunctionRegistry.java:594)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getGenericUDAFEvaluator(SemanticAnalyzer.java:1882)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genGroupByPlanMapGroupByOperator(SemanticAnalyzer.java:2270)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genGroupByPlanMapAggr1MR(SemanticAnalyzer.java:2821)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genBodyPlan(SemanticAnalyzer.java:4543)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:5058)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:4999)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:5020)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:4999)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:5020)
>         at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:5587)
>         at
> org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:114)
>         at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:317)
>         at org.apache.hadoop.hive.ql.Driver.runCommand(Driver.java:370)
>         at org.apache.hadoop.hive.ql.Driver.run(Driver.java:362)
>         at
> org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:140)
>         at
> org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:200)
>         at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:311)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
>
> One option for me is to write  a resolver which I will do. But, I just
> wanted to know if this is a bug in hive whereby it is not able to get the
> write evaluator. Or if this is a gap in my understanding.
>
> I look forward to hearing your views on this.
>
> Thanks and Regards,
> Sonal
>



-- 
Yours,
Zheng

Reply via email to