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