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
