配置单元 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 是双精度类型,col4 是字符串类型。

但是它们都被转换为字符串。

这是我的评估函数中的一个片段。

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)));
                }

这会将它们全部作为字符串返回。

有没有办法保留列类型?

是的

,列类型保留在"对象检查器"字段中。对于映射,可以在 hive cli 上观察相同的行为named_struct,但是输入都转换为字符串。

最新更新