我正在编写一个自定义 Hive UDF 来根据属性文件中定义的值解析 Map 中的键/值对。格式为 validate(Map<String, String>, String)。目的是让第一个参数是要评估的 Map,第二个参数是包含属性文件。
我遇到的问题是 GenericUDF 类似乎期望这两个值对于查询都是动态的,因为 initialize() 函数将参数转换为 ObjectInspectors,从事物的外观来看,它没有提供返回对象的可能选项他们正在检查。
我希望初始化函数加载属性文件,并且评估函数返回通过/失败。这几乎不足以涵盖我尝试过的所有内容,但希望它能让知道他们在做什么的人对这个问题有一个好主意:
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
mapOI = (MapObjectInspector) arguments[0];
StringObjectInspector stringOI = (StringObjectInspector) arguments[1];
try {
// Begin Debug
System.out.println(stringOI.getPrimitiveJavaObject(((DeferredObject) arguments[1]).get()));
// End Debug
loadProperties(stringOI.getPrimitiveJavaObject(((DeferredObject) arguments[1]).get()));
}
catch (HiveException exception) {
throw new UDFArgumentTypeException(1, "Failed to cast properties file path for evaluation by loadProperties... What did you do?");
}