hive UDF编写
hive的类SQL预发给数据挖掘工作者带来了很多便利,海量数据通过简单的sql就可以完成分析,有时候hive提供的函数功能满足不了业务需要,就需要我们自己来写UDF函数来辅助完成,下面用一个简单的例子说明过程,以及注意事项。
?
UDF函数其实就是一个简单的函数,执行过程就是在Hive转换成mapreduce程序后,执行java方法,类似于像Mapreduce执行过程中加入一个插件,方便扩展.?UDF只能实现一进一出的操作,如果需要实现多进一出,则需要实现UDAF .
?
(1)首先引入jar包,我在写的时候引入了两个jar包,分别是hive-exec-0.8.0.jar?hadoop-core-0.20.2.jar
(2)写一个类,继承UDF类,例如:public class CheckAddress extends UDF
(3)写一个方法,名称为evaluate,此方法支持重载,例如:
public String evaluate(String srcAddress,String countyId){return ""}
(4)写完之后,导入jar包(命令行或者eclipse中自带的export功能),jar包上传到hadoop的运行环境中
(5)导入jar包hive,命令如下:
?
//add jar文件
add jar /home/bixiao.zy/udf/checkaddress.jar;
//创建函数,名称自定义,as后面是jar保重的类名称
create temporary function checkaddress as ?'com.taobao.logistics.CheckAddress'
//在hive sql中使用
select *from ?order ?where?pt='XXXXXXXXX' ?and checkaddress(receiver_address,receiver_county_id)='1'?
?
?
如果需要写脚本来跑定时任务,那么上面的三段必须在一个会话过程中,否则函数会没有添加进去。
?
$HIVE_HOME/bin/hive -u XXX-p XXXX-e ? “都在这里面呵呵”
?