gpt4 book ai didi

java - Hive UDF 将 array 作为参数传递

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

我正在尝试通过 collect_set 将数组传递给 Hive UDF:

SELECT ..., collect_set(...) FROM ...;

我的 Hive UDF 想要接受这个数组并将每个数组元素的第一个字母附加到输出字符串:

public class MyUDF extends UDF {

public String evaluate(String[] array) {
String output = "";

// Check for valid argument
if (array == null) return output;

try {
// Add first character of every array element to output string
for (int i = 0; i < array.length; i++) {
output += array[i].charAt(0);

// If there is another array element after this one, append DELIMITER
if (i + 1 < array.length) output += ",";
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.exit(1);
}
return output;
}

但是当我尝试运行时遇到的问题:

ADD JAR ./list_builder.jar;
CREATE TEMPORARY FUNCTION build_list as 'MyCustomUDF.MyUDF';

SELECT ..., build_list(collect_set(description)) FROM ...;

...
FAILED: SemanticException [Error 10014]: Line 142:21 Wrong arguments 'description': No matching method for class MyCustomUDF.MyUDF with (array<string>). Possible choices: _FUNC_(struct<>)

我已经尝试将 String[] 更改为 ArrayListList 但我仍然遇到同样的错误。

注意:collect_set 的输出类似于:[L-ADD], "P-OAN", "P-OAH"],所以我希望我的 UDF 输出如下:L,P,P

有什么想法吗?

谢谢。

最佳答案

按照@kostya的回答,我使用了substr:

SELECT ..., collect_set(substr(description,0,1)) FROM ...;

这意味着我不需要 UDF。

谢谢。

关于java - Hive UDF 将 array<string> 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30433047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com