一、UDF
背景及意义:
系统内置函数无法解决所有的实际业务问题,需要开发者自己编写函数实现自身的业务实现诉求。
应用场景非常多,面临的业务不同导致个性化实现很多,故udf很需要。
函数扩展得到解决,极大丰富了可定制化的业务需求。
IO要求-要解决的问题:
in:out=1:1,只能输入一条记录当中的数据,同时返回一条处理结果。
属于最常见的自定义函数,像cos,sin,substring,instr等均是如此要求。
实现步骤(java自定义创建udf类)
- 自定义一个java类
- 继承UDF类
- 约定俗成的重写evaluate方法
- 打包类所在项目成一个all-in-one的jar包并上传到hive所在机器
- 在hive中执行add jar操作,将jar加载到classpath中。
- 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
hive sql中像调用系统函数一样使用udf函数
二、UDAF
实现步骤:
- 自定义一个java类
- 继承UDAF类
- 内部定义一个静态类,实现UDAFEvaluator接口
- 实现方法init,iterate,terminatePartial,merge,terminate共5个方法.
- 在hive中执行add jar操作,将jar加载到classpath中。
- 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
- hive sql中像调用系统函数一样使用udaf函数
?
|