@TOChive udaf
自定义函数
hive支持用户自定义函数,主要有三种。UDF、UDAF和UDTF。
UDF(User-Defined-Function)。输入一个或者多个参数,返回一个值。对一行或者一条数据操作。例如求长度length().
UDAF(User- Defined Aggregation Funcation)。聚合函数,多进一出,对于多条数据进行聚合操作。例如max(),min(),count()。多行转成一行。
UDTF(User-Defined Table-Generating Functions)。一进多出,可以对一行数据转成多行。
udf通常来说比较简单,但是用的也最多。这里只聚一个简单的例子.重点讨论UDAF的实现。
//写一个函数判断输入的字符串是否为空
import org.apache.hadoop.hive.ql.exec.UDF;
public class is_null extends UDF {
public static int evaluate(String str){
if (str == null || str.equals("") || str.replaceAll("\\s","").length()<=0){
return 0;
}else {
return 1;
}
}
}
编写简单类型的UDF只需要注意两点即可
1).继承org.apache.hadoop.hive.ql.exec.UDF
2).实现evaluate方法。
然后把程序打包放到hive服务器上。
hive>add jar /data1/is_null.jar;
hive>create temporary function is_null as 'com.shaohua.udf.is_null';
hive>select is_null(column) from table1;
UDAF
UDAF需要继承的类
1).org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
2).org.apache.hadoop.hive.ql.exec.UDAF;
UDAF需要实现的方法
a).init()用于udaf的初始化。
b).iterate().接收输入的参数,进行内部轮转,返回boolean。
c).terminatePartial():无参数,其为iterate函数轮转结束后,返回轮转数据,类似于hadoop的Combiner
d).merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
e).terminate():返回最终的聚集函数结果.
首先举一个常用的例子,求平均值。
import org.apache.

本文介绍了hive中自定义函数的三种类型:UDF、UDAF和UDTF,并重点讨论了UDAF的实现。UDAF用于多行数据的聚合操作,如max()和min()。在开发UDAF时,需要继承UDAFEvaluator和UDAF类,实现包括init(), iterate(), terminatePartial(), merge()和terminate()等关键方法。以平均值计算为例,展示了UDAF的实际应用。"
79226724,7461245,图形输出:规律与实践,"['算法', '编程实践', '问题解决', '数学', '计算机科学']
最低0.47元/天 解锁文章
1524

被折叠的 条评论
为什么被折叠?



