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的主要内容,如果未能解决你的问题,请参考以下文章