gpt4 book ai didi

java - 如何返回 ObjectInspector 引用的对象

转载 作者:行者123 更新时间:2023-12-02 07:31:35 26 4
gpt4 key购买 nike

我正在编写一个自定义 Hive UDF,以根据属性文件中定义的值解析 Map 中的键/值对。格式为 validate(Map , String)。目的是让第一个参数是要评估的 Map,第二个参数包含属性文件。

我遇到的问题是 GenericUDF 类似乎期望这两个值对于查询都是动态的,因为初始化()函数将参数转换为 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?");
}

最佳答案

初始化方法仅被调用一次,因此参数只能被视为描述评估方法期望接收的输入类型的元数据。因此,您真正可以看到输入值的唯一地方是评估方法,该方法可能被多次调用,通常每行一次。您实际上应该只使用初始化函数来验证类型而不是实际值。也就是说,在您的情况下,检查输入是否为映射类型,且原始类别元素为字符串类型。实际值的验证应在评估方法中进行。

关于java - 如何返回 ObjectInspector 引用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com