实现一个Hive UDF需要满足以下两点要求:
(1)定义一个UDF类ConcatString :按指定格式拼接字符串
(2)定义一个UDF类SalaryGrade :判断员工表中的工资级别
(1)把编写好的程序打包放到目标机器上
(2)进入Hive客户端,添加myudf.jar包到当前环境
(3)创建临时函数
测试数据:
(1)查询HQL语句
连接两个字段:默认连接符用“====”
连接两个字段:自定义连接符
(2)销毁临时函数
例1:对于以下数据
1、开发一个java类,继承UDF(聚合函数继承UDAF)并重载evaluate方法
2、打成jar包上传到服务器
3、将jar包添加到hive的classpath
add JAR /home/hadoop/udf.jar
4、创建临时函数与开发好的java class 关联
create temporary function getprovince as 'bigdata.udf.ToLowerCase'
5、hql中使用
例2:
javabean:这个类是public的,还要有一个无参数的构造函数。第二,属性是private的,必须通过get 和set 方法进行访问。第三,支持“事件”,例如addXXXXListener(XXXEvent e),可以处理各种事件,比如鼠标点击,键盘响应等等。第四,提供一个反射机制。第五,可以序列化/反序列化的,这样,我就可以被方便的存储,转移了。
但是只有一个字段,如何把它分为四个字段
提供了在sql中调用自写脚本(python或shell脚本)的功能,适合hive中没有的功能又不想写udf的情况。
1.加载rating.json文件到hive的一个原始表
2.需要解析json数据成四个字段,插入一张新表t_rating
内置json函数
3.使用transform+python的方式转换unixtime为weekday
先编辑一个python脚本文件,然后将文件加入hive的classpath下:
UDF函数是一进一出函数,如hive中的substr、date_add、date_sub都是UDF函数。
hive的udf有 两种 实现方式或者实现的API,一种是 udf 比较简单,一种是 GenericUDF 比较复杂
注意继承UDF类时,不会报错、不需要实现抽象方法,这时需要我们重写evaluate()方法,而且方法名必须是evaluate。
编写一个UDF,关键在于自定义Java类需要继承UDF类并实现evaluate()函数。
因为在hive客户端执行查询时,对于 每行输入 都会调用evaluate()函数,evaluate()函数处理后的值会返回给hive。
在hive客户端,将 xxx HiveUDF.jar 文件加载到类路径:
1) 创建临时函数语法:
2)创建永久函数语法
参考文章:hive自定义函数UDF的使用方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)