UDF(user defined function).hive的UDF包含三种:UDF支持一个输入产生一个输出,UDTF支持一个输入多个输出输出,UDAF支持多输入一输出。
UDF用法:
1、UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。
2、编写UDF函数的时候需要注意一下几点:
a)自定义UDF需要继承org.apache.hadoop.hive.ql.exec.UDF
b)需要实现evaluate函。
c)evaluate函数支持重载。
还支持可变参数 evaluate(String... strs)
for ( int i = 0; i < strs. length ; i++) {
}
3、以下是大小写字母转换的UDF。evaluate函数有两个参数一个是待处理的数据,一个是处理方式
Hive的UDF开发只需要重构UDF类的evaluate函数即可。例:
package udftest;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class L_or_U extends UDF {
public Text evaluate(Text t,String up_or_lower){
if(t==null){
return null;
}else if(up_or_lower.equals("lowercase")){
return new Text(t.toString().toLowerCase());
}else if(up_or_lower.equals("uppercase")){
return new Text(t.toString().toUpperCase());
}else
return null;
}
}
4.然后导出jar包,eclipse中选中工程右击->export->jar file->next->选择要导出的类及存放位置和jar包名->finish
a)把程序打包后放到目标机器上去;
b)进入hive客户端,添加jar包:hive>add jar /run/jar/udf_test.jar;
c)创建临时函数:hive>CREATE TEMPORARY FUNCTION L_U AS 'udftest.L_or_U';(单引号的内容是包名加类名)
d)查询HQL语句:hive> select L_U(id,'uppercase') from course;(L_U是函数名,id是列名,uppercase是L_or_U类中evalute的参数up_or_lower)
e)销毁临时函数:hive> DROP TEMPORARY FUNCTION add_example;
5、细节在使用UDF的时候,会自动进行类型转换