[英]Return ArrayList<String> in HIVE UDF
我创建了一个UDF函数,该函数带有两个文本参数并返回ArrayList。 但是当我在Hive中调用UDF函数时,它给了我一个错误。
这是我的UDF代码的片段:
public class MyTestUDF extends UDF {
public ArrayList<String> evaluate(Text i, Text s) {
if(s == null) return null;
String id = i.toString();
String value = s.toString();
<parse string value to v1, v2, and v3, and apply logic>
ArrayList<String> result = new ArrayList<String>();
result.add(id);
result.add(v1);
result.add(v2);
result.add(v3);
return result;
}
}
这是我在Hive中运行的方式:
hive> SELECT multi[0] AS id,
multi[1] AS value1,
multi[2] AS value2,
multi[3] AS value3
FROM (SELECT my_udf_function(id, data) AS multi FROM testDB) bar;
FAILED: SemanticException [Error 10033]: Line 1:7 [] not valid on
non-collection types '0': struct<elementdata:struct<>,size:int>
数据是一个巨大的字符串值,我解析并应用逻辑并以ArrayList的格式返回三个值。
我引用了此链接,该链接从HIVE UDF返回和使用多个值,但对我不起作用。
谁能帮忙吗?
谢谢!
将ArrayList<String>
更改为ArrayList<Text>
,因为Hive需要可序列化的类型,例如FloatWritable
, IntWritable
或Text
。 有关更多信息,我建议从HIVE UDF返回并使用多个值 ,以便于阅读和解释以后的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.