【发布时间】:2017-08-01 20:37:20
【问题描述】:
我创建了一个 UDF 函数,它接受两个文本参数并返回 数组列表。 但是当我在 Hive 中调用 UDF 函数时,它给了我一个错误。
这是我的 UDF 代码的 sn-p:
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 的格式返回三个值。
我引用了这个链接Returning & Using Multiple Values from a HIVE UDF,但它对我不起作用。
有人可以帮忙吗?
谢谢!
【问题讨论】:
-
这看起来不错,对我来说测试也不错。您的
my_udf_function是否有可能通过调用CREATE TEMPORARY FUNCTION与您的MyTestUDF不同的类名来别名为其他UDF 类?
标签: java hadoop hive user-defined-functions