自定义配置单元 UDF 中的覆盖评估方法

Posted

技术标签:

【中文标题】自定义配置单元 UDF 中的覆盖评估方法【英文标题】:Overridden evaluate methods in custom hive UDF 【发布时间】:2015-03-23 12:21:04 【问题描述】:

我是为 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());
	  

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

我的查询是 - 我如何在一个类中编写多个评估方法。我需要为不同的方法编写不同的类吗?如果我在单个类中编写这些被覆盖的方法,那么 Hive 将如何在包含相同类型参数的不同方法之间有所不同。

请指导我正确的方法。

【问题讨论】:

【参考方案1】:

在 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的更多信息,请访问this page

【讨论】:

【参考方案2】:

这种类型的重载可能吗?

喜欢-

public class ExampleUDF extends UDF

    public Integer evaluate(Integer num) 
        return num*2;

    

    public Integer evaluate(Integer num1, Integer num2) 
        return num1*num2;
    

【讨论】:

以上是关于自定义配置单元 UDF 中的覆盖评估方法的主要内容,如果未能解决你的问题,请参考以下文章

试图让 Excel UDF 自定义单元格格式不返回任何内容“(空单元格)”或“格式化的用户输入”

自定义UDF函数,从hive保存到mongodb

更新配置单元 UDF 的 jar

在 HIVE 中运行 UDF 以进行自定义反序列化时出现 OWN_TASK_FAILURE。

java - 调用自定义火花UDF时如何解决Java中的NoSuchMethodException

自定义 Hive UDF 中的地图列表