Hive Udf,Struct类型丢失类型信息。无论如何都要恢复类型信息

时间:2017-02-04 05:21:08

标签: java hive udf

我的表主要是双类型列和一些字符串列。我使用行格式serde 'org.openx.data.jsonserde.JsonSerDe'创建了表格 从文本文件。 我首先使用named_struct函数组合这些列并将其传递给我的udf。这样的事情。

select id, my_udf(named_struct("key1", col1, "key2", col2, "key3",col3, "key4", col4), other_udf_param1, other_udf_param2);

因此,col1,col2和col3是double类型,col4是String类型。

但是所有这些都被转换为String。

这是我的评估功能的片段。

List<? extends StructField> fields = this.dataOI.getAllStructFieldRefs();

    for (int i = 0; i < fields.size(); i++) {
        System.out.println(fields.get(i).toString());
        String canName = this.featuresOI.getStructFieldData(arguments[2].get(), fields.get(i)).getClass().getCanonicalName();
        System.out.println(canName + " can name");
        System.out.println(this.dataOI.getStructFieldData(arguments[2].get(), fields.get(i)));
                }

这会将所有这些作为字符串返回。

有没有办法可以保留列类型?

1 个答案:

答案 0 :(得分:0)

是的,列类型保留在Object Inspector字段中。对于named_struct,可以在hive cli上查找相同的行为,但是对于map,输入都将转换为字符串。