Hi Zheng,

My query is:

select a.myTable.key, a.myTable.attribute, a.myTable.count from (select
explode (t.pc) as myTable from (select topx(2, product_id, customer_id,
product_count) as pc from (select product_id, customer_id, product_count
from products_bought order by product_id, product_count desc) r ) t )a;

My overloaded iterators are:

public boolean iterate(int max, int groupBy, int attribute, int count)

public boolean iterate(int max, int groupBy, int attribute, double count)

Before overloading, my query was running fine. My table products_bought is:
product_id int, customer_id int, product_count int

And I get:
FAILED: Error in semantic analysis: Ambiguous method for class
org.apache.hadoop.hive.udaf.TopXPerGroup with [int, int, int, int]

The hive logs say:
2010-02-03 11:18:15,721 ERROR processors.DeleteResourceProcessor
(SessionState.java:printError(255)) - Usage: delete [FILE|JAR|ARCHIVE]
<value> [<value>]*
2010-02-03 11:22:14,663 ERROR ql.Driver (SessionState.java:printError(255))
- FAILED: Error in semantic analysis: Ambiguous method for class
org.apache.hadoop.hive.udaf.TopXPerGroup with [int, int, int, int]
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)



Thanks and Regards,
Sonal


On Thu, Feb 4, 2010 at 12:12 AM, Zheng Shao <[email protected]> wrote:

> 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