自定义配置单元 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 自定义单元格格式不返回任何内容“(空单元格)”或“格式化的用户输入”
在 HIVE 中运行 UDF 以进行自定义反序列化时出现 OWN_TASK_FAILURE。