Hive从入门到精通8:Hive自定义函数(UDF)

Hive从入门到精通8:Hive自定义函数(UDF),第1张

Hive中的用户自定义函数(即User Defined Function,简称UDF),是用户对一些列Hive *** 作进行封装以实现特定的功能的函数。比如:在Hive的UDF中,可以直接使用select语句,对查询结果按照一定的格式输出。

实现一个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的使用方法


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11936365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存