重写了自定义配置单元UDF中的求值方法



我是为hive编写自定义udf的新手。我已经成功地尝试为toupper函数编写自定义udf。

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
@Description(
		  name="SimpleUDFExample",
		  value="returns 'hello x', where x is whatever you give it (STRING)",
		  extended="SELECT simpleudfexample('world') from foo limit 1;"
		  )
class SimpleUDFExample extends UDF {
  
	public Text evaluate(Text input) {
	    if(input == null) return null;
	    return new Text("Hello " + input.toString());
	  }
}

我必须根据不同的输入参数编写不同的evaluate实现。

我的问题是-如何在一个类中编写多个求值方法。我需要为不同的方法编写不同的类吗?若我把这些重写的方法写在一个类中,那个么在包含相同类型参数的不同方法之间,Hive的方式会有所不同。

请指引我走正确的路。

在hive中,您可以重载与JAVA相同的方法。但在UDF中,您必须使用Hadoop数据类型,如IntWritable、FloatWritable。。。

请在下面找到代码。

public class ToUpper extends UDF{
    public String evaluate(Text word) {
        String upperCase=word.toString();
        return upperCase;
    }
    public String evaluate(IntWritable word) {
        String upperCase="Error : Input type is Integer. Cannot convert to UpperCase";
        return upperCase;
    }
    public String evaluate(FloatWritable word) {
        String upperCase="Error : Input type is Float. Cannot convert to UpperCase";
        return upperCase;
    }
    public String evaluate(LongWritable word) {
        String upperCase="Error : Input type is Long. Cannot convert to UpperCase";
        return upperCase;
    }

}

有关UDF的更多信息,请访问此页面

这种类型的重载可能吗?

类似-

public class ExampleUDF extends UDF{
    public Integer evaluate(Integer num) {
        return num*2;
    }
    public Integer evaluate(Integer num1, Integer num2) {
        return num1*num2;
    }
}

相关内容

  • 没有找到相关文章

最新更新