Hive易数平台实践
udf,udtf,udaf
UDF(User-Defined-Function) 一进一出
UDAF(User- Defined Aggregation Funcation) 多进一出 (聚合函数,MR)
UDTF(User-Defined Table-Generating Functions) 一进多出 (生成多行结果)
UDF
1.注意事项
a)自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。
b)需要实现evaluate函。
c)evaluate函数支持重载。
UDAF
1.注意事项
a)导入以下两个包:
import org.apache.hadoop.hive.ql.exec.UDAF
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator
b)函数类需要继承UDAF类,内部类Evaluator实UDAFEvaluator接口
c )Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数 :
1)init函数实现接口UDAFEvaluator的init函数。
2)iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean。
3)terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据,terminatePartial类似于hadoop的Combiner。
4)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。
5)terminate返回最终的聚集函数结果。
2.Mode对应的各阶段方法
(1)PARTIAL1 - Map阶段
iterate()和terminatePartial()
(2)PARTIAL2 - Map合并阶段
merge()和terminatePartial()
(3)FINAL - Reduce阶段
merge()和terminate()
(4)COMPLETE - 无Reduce阶段时执行
iterate()和terminate()
UDTF
1.注意事项
a)继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF。
b)实现initialize, process, close三个方法
2.用法
a)直接select中使用:select explode_map(properties) as (col1,col2) from src;
b)和lateral view一起使用:select src.id, mytable.col1, mytable.col2 from src lateral view explode_map(properties) mytable as col1, col2;
UDF在易数平台中的实践
Hive执行
hive-jdbc 模式
- 将udf.jar包上传到项目hdfs中
- 先add jar (HDFS全路径:hdfs://hz-clusterx/xxx/udf.jar),再创建udf
hive-client 模式
将udf.jar包上传到项目任务资源中
先add jar (jar包相对路径 ./udf.jar),再创建udf
以上内容对您是否有帮助?