HIVE UDF:RuntimeException 内部错误:找不到未知的 ObjectInspector

Posted

技术标签:

【中文标题】HIVE UDF:RuntimeException 内部错误:找不到未知的 ObjectInspector【英文标题】:HIVE UDF :RuntimeException Internal error: Cannot find ObjectInspector for UNKNOWN 【发布时间】:2017-03-01 21:23:47 【问题描述】:

我尝试创建一个 hive UDF,它返回多个结果。 经度和纬度是 UDF 的参数。

当我运行该函数时,出现“FAILED: RuntimeException Internal error: Cannot find ObjectInspector for UNKNOWN”错误。

代码:

import java.util.ArrayList;

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;


public class GetStateName extends GenericUDF 
    private ArrayList<String> result;

    public Object evaluate(DeferredObject[] arg0) throws HiveException 
        String lat = arg0[0].toString();
        String lng = arg0[1].toString();
        ArrayList<String> tmpLatLng = LookUp.getLatLng(lat,lng);

        result = new ArrayList<String>();
        result.add(tmpLatLng.get(0));
        result.add(tmpLatLng.get(1));
        return result;
    

    public String getDisplayString(String[] arg0) 
        return new String("Address");
    


    public ObjectInspector initialize(ObjectInspector[] arguments)
            throws UDFArgumentException 
        // Exactly one input argument
        if( arguments.length != 2 ) 
            throw new UDFArgumentLengthException( " accepts exactly two argument.");
        

        return ObjectInspectorFactory.getStandardListObjectInspector(PrimitiveObjectInspectorFactory.javaHiveVarcharObjectInspector);
    


【问题讨论】:

【参考方案1】:

hive UDF 不支持 Object 作为返回类型,将 Object 替换为 String。 公共对象评估 -> 公共字符串评估

【讨论】:

请在您的答案中添加一些描述,并解释其工作原理和解决问题的方法。

以上是关于HIVE UDF:RuntimeException 内部错误:找不到未知的 ObjectInspector的主要内容,如果未能解决你的问题,请参考以下文章

检查python写的hive udf中的错误

如何写hive的udf函数

hive之udf函数的使用

hive自定义UDF函数,步骤详解

hive udf 函数:MD5

Hive UDF:Hive 没有向 UDF 发送正确的参数