首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将array<string>作为参数传递给用户

将array<string>作为参数传递给用户
EN

Stack Overflow用户
提问于 2015-05-25 07:15:54
回答 2查看 4.2K关注 0票数 1

我试图通过Hive UDF通过collect_set将一个数组传递给一个

代码语言:javascript
复制
SELECT ..., collect_set(...) FROM ...;

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

代码语言:javascript
复制
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;
}

但当我试图竞选时,我遇到的问题是:

代码语言:javascript
复制
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得到一个输出。

有什么想法吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-05-27 02:40:16

在@kostya的回答之后,我使用了substr

代码语言:javascript
复制
SELECT ..., collect_set(substr(description,0,1)) FROM ...;

这意味着我不需要UDF。

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2016-06-30 12:14:17

尝试ArrayList<String>而不是String[],因为hive以array<String>而不是String[]的形式发送数组

代码语言:javascript
复制
public class MyUDF extends UDF {

public String evaluate(ArrayList<String> array) {    

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30433047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档