1. 概述
用户自定义聚合函数(UDAF)支持用户自行开发聚合函数完成业务逻辑。从实现上来看 Hive 有两种创建 UDAF 的方式,第一种是 Simple 方式,第二种是 Generic 方式。
1.1 简单 UDAF
第一种方式是 Simple(简单) 方式,即继承 org.apache.hadoop.hive.ql.exec.UDAF 类,并在派生类中以静态内部类的方式实现 org.apache.hadoop.hive.ql.exec.UDAFEvaluator 接口:
这种方式简单直接,但是在使用过程中需要依赖 Java 反射机制,因此性能相对较低。在 Hive 源码包 org.apache.hadoop.hive.contrib.udaf.example 中包含几个示例,可以直接参阅。但是这种方式已经被标注为 Deprecated,建议不要使用这种方式开发新的 UDAF 函数。
1.2 通用 UDAF
简单 UDAF 编写起来比较简单,但是由于使用了 Java 反射机制导致性能下降,并且不允许使用变长参数等特性。通用 UDAF 允许所有这些特性,但编写起来可能不如简单 UDAF 那么直观。通用(Generic) UDAF 是 Hive 社区推荐的新写法,推荐用新的抽象类 org.apache.