在hive udf中返回arraylist< string>

oyxsuwqo  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(990)

我创建了一个udf函数,它接受两个文本参数并返回arraylist。但是当我在hive中调用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的格式。
我引用了这个返回的链接&使用一个hiveudf中的多个值,但它对我不起作用。
有人能帮忙吗?
谢谢!

lawou6xi

lawou6xi1#

改变 ArrayList<String>ArrayList<Text> ,因为配置单元需要可序列化的类型,例如 FloatWritable , IntWritable ,或 Text . 关于更多信息,我建议返回并使用hiveudf中的多个值,这些值很容易阅读并解释之后要做什么。

相关问题