hive UDF

UDF(user defined function).hive的UDF包含三种:UDF支持一个输入产生一个输出,UDTF支持一个输入多个输出输出,UDAF支持多输入一输出。

UDF用法:

1UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。

2、编写UDF函数的时候需要注意一下几点:

a)自定义UDF需要继承org.apache.hadoop.hive.ql.exec.UDF

b)需要实现evaluate函。

cevaluate函数支持重载。

还支持可变参数 evaluate(String... strs)

   for int i = 0; i < strs. length ; i++) {  

       }

3、以下是大小写字母转换的UDFevaluate函数有两个参数一个是待处理的数据,一个是处理方式

    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的时候,会自动进行类型转换


你可能感兴趣的:(hive)