HiveUDAF的实现
1.添加jar包依赖
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
2.继承AbstractGenericUDAFResolver类
2.1 重写getEvaluator(GenericUDAFParameterInfo info)方法
该方法的参数是参数类型的信息,通过 getParameters方法返回一个参数类型的数组,数组中数据的顺序与参数的顺序一致。
TypeInfo[] parameters = info.getParameters();
通过对该数组的长度进行判断,检查参数的数量是否符合要求。
if(parameters.length !=1){
throw new UDFArgumentTypeException(parameters.length-1,"只接受一个String类型参数");
}
通过对该数组指定位置参数的类型进行判断,检查参数的类型是否是基本数据类型。
if(parameters[0].getCategory()!= ObjectInspector.Category.PRIMITIVE){
throw new UDFArgumentTypeException(0,"只接受一个String类型参数");
}
如果是基本数据类型,进行检查是否为所需的类型如String
if(((PrimitiveTypeInfo)parameters[0]).getPrimitiveCategory()!=
PrimitiveObjectInspector.PrimitiveCategory.STRING){
throw new UDFArgumentTypeException(0,"只接受一个String类型参数");
}
通过以上类型检查,则进行运算,返回一个用于计算的类
return new MyEvaluator();
2.2 创建静态内部类继承 GenericUDAFEvaluator