蜂巢:NoMatchingMethodException 类没有匹配的方法

Posted

技术标签:

【中文标题】蜂巢:NoMatchingMethodException 类没有匹配的方法【英文标题】:hive: NoMatchingMethodException No matching method for class 【发布时间】:2017-08-07 05:20:15 【问题描述】:

我在配置单元中创建了一个 UDAF,它将返回列中的第一个重复数字。

表:firstrepeatingnumber,列:indata,数据:

55
125
1561234
123
12
1
-123
321
124
55
123
15236
32
125
44

UDAF:练习.FirstRepeatingNumber

UDAF:

package practise;
import java.util.ArrayList;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
@SuppressWarnings("deprecation")
public class FirstRepeatingNumber extends UDAF
    class firstRepeatingNumberUDAFEvaluator implements UDAFEvaluator
        int len=0,number=0,index=0,i=0,j=0,arrLength=0,set=0,ans=0;
        ArrayList<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> arr2 = new ArrayList<Integer>();
        @Override
        public void init() 
            for(i=0;i<10;i++)
                arr.add(new ArrayList<Integer>());
        
        public boolean iterate(int value)
            if(set==1)
                return true;
            index=value%10;
            tryarrLength=arr.get(index).size();
            catch(Exception ex)
            for(j=0;j<arrLength;j++)
                if(value==arr.get(index).get(j))
                    ans=value;
                    set=1;
                    return true;
                
            
            if(set==0)
            
                try
                    arr2=arr.get(index);
                
                catch(Exception ex)
                
                arr2.add(value);
                arr.set(index, arr2);
            
            return true;
        
        public int terminate()
            return ans;
        
    

这里是函数创建:

create function GetFirstReNumber AS 'practise.FirstRepeatingNumber';

当我运行选择查询时:

select GetFirstReNumber(indata) as ans from firstrepeatingnumber;

报错:

失败:NoMatchingMethodException 类 practice.FirstRepeatingNumber 与 (int) 没有匹配方法。可能的选择:

对于这个 UDAF,在这个数据集上的预期答案是 55。我无法理解为什么在执行函数时会出错。

【问题讨论】:

【参考方案1】:

您应该检查“indata”列的数据类型,它应该是int。 而且奇怪的是我没有看到函数terminatePartial()merge()的实现

【讨论】:

【参考方案2】:

请按以下步骤操作:

1.重启hive

2.DROP FUNCTION xxx

3.创建函数XXX

4.运行...

【讨论】:

以上是关于蜂巢:NoMatchingMethodException 类没有匹配的方法的主要内容,如果未能解决你的问题,请参考以下文章

蜂巢 - 如何每天自动将数据附加到蜂巢表?

蜂巢艺术中心 | Hive Center for Contemporary Art

蜂巢句子功能如何打破每个句子

蜂巢表不见了

宜人蜂巢技术点解读

如何将本地蜂巢连接到雪花?