SQL DDL:用户自定义函数UDAF
UDAF的创建与实现
Hive UDAF有两种实现方式,可以继承UDAF或者AbstractGenericUDAFResolver类,也可以实现GenericUDAFResolver2接口。 其中直接继承UDAF类,功能实现较为简单,但在运行时使用Hive反射机制,导致性能有损失。
在较新版本中org.apache.hadoop.hive.ql.exec.UDAF类已经废弃,但因为其实现方便,在很多开发者中较为流行。
通过AbstractGenericUDAFResolver和GenericUDAFResolver2实现UDAF,更加灵活,性能也更出色,是社区推荐的写法。
而AbstractGenericUDAFResolver是GenericUDAFResolver2接口的实现类,所以一般建议直接继承AbstractGenericUDAFResolver类进行UDAF的编写。
UDAF实现方式一:继承UDAF类
UDAF开发流程
继承UDAF类进行UDAF的开发流程是:
- 继承org.apache.hadoop.hive.ql.exec.UDAF类
- 以静态内部类方式实现org.apache.hadoop.hive.ql.exec.UDAFEvaluator接口
- 实现接口中的init、iterate、terminatePartial、merge、terminate方法
其中UDAFEvaluator接口中的方法具体描述为: