繁体   English   中英

返回ArrayList <String> 在HIVE UDF中

[英]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需要可序列化的类型,例如FloatWritableIntWritableText 有关更多信息,我建议从HIVE UDF返回并使用多个值 ,以便于阅读和解释以后的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM