gpt4 book ai didi

java - Hive UDTF 返回 ArrayList 列

转载 作者:可可西里 更新时间:2023-11-01 14:49:41 25 4
gpt4 key购买 nike

我是 Hive UDTF 的新手。我有一个要求,我必须在 UDTF 中将字符串值作为 Paratmeter 传递,并且返回的 Column 应该是 ArrayList。

我写了下面的代码:

public StructObjectInspector initialize(ObjectInspector[] arg0)
throws UDFArgumentException {
ArrayList<String> fieldNames = new ArrayList<String>();
ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();
fieldNames.add("col1");
stringOI = (PrimitiveObjectInspector) arg0[0];
listOi=(ListObjectInspector) arg0[0];
fieldOIs.add(listOi.getListElementObjectInspector());
return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);
}

@Override
public void process(Object[] record) throws HiveException {
// TODO Auto-generated method stub
String document = (String) stringOI.getPrimitiveJavaObject(record[0]);
if (document == null) {
return;
}
firstColumn=(String) stringOI.getPrimitiveJavaObject(record[0]);
secondColumn=(String) stringOI.getPrimitiveJavaObject(record[1]);
if(outputMapper.containsKey(firstColumn))
{

ArrayList<String> tempList=new ArrayList<String>();
tempList=outputMapper.get(firstColumn);
tempList.add(secondColumn);
outputMapper.put(firstColumn,tempList);
}
else
{
childVendorList=new ArrayList<String>();
childVendorList.add(secondColumn);
outputMapper.put(firstColumn,childVendorList);
}
forward(outputMapper.get(firstColumn));

}

我得到以下异常:

java.lang.ClassCastException: org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyStringObjectInspector 无法转换为 org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector

谁能帮忙???

最佳答案

listOi=(ListObjectInspector) arg0[0];
fieldOIs.add(listOi.getListElementObjectInspector());
return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);

这个 arg0[0] 是一个原始对象检查器。使用listOi.getListElementObjectInspector(),只是得到一个类似的PrimitiveObjectInspector(像String,Integer 不是List)。应该是

fieldOIs.add(ObjectInspectorFactory.getStandardListObjectInspector(stringOI ))

这将指定带有 stringOI 类型列表的输出列。

关于java - Hive UDTF 返回 ArrayList 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539923/

25 4 0