Hive 用户自定义函数开发

几个重要概念

ObjectInspector 常用方法

PrimitiveObjectInspectorFactory.writableDoubleObjectInspector
ArrayList<ObjectInspector> foi = new ArrayList<ObjectInspector>();

foi.add(PrimitiveObjectInspectorFactory.writableLongObjectInspector);
foi.add(PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);
foi.add(PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);

ArrayList<String> fname = new ArrayList<String>();
fname.add("count");
fname.add("sum");
fname.add("variance");

ObjectInspectorFactory.getStandardStructObjectInspector(fname, foi);
PrimitiveObjectInspectorUtils.getXXX(obj, oi)

很简单 javaXXXObjectInspector 对应的是 Java原生的数据类型, 而 writableXXXXObjectInspector 对应 Hive 可序列化的数据类型。
javaStringObjectInspectorwritableStringObjectInspector 为例,前者对应 String 而后者对应 Text
因此,如果你的UDF返回的是java原生类型,那么你的输出 ObjectInspector 必须是前者, 否则将会报错!

UDF

UDAF

UDTF