Java 配置单元Udf,结构类型丢失类型信息。是否仍要恢复类型信息

Java 配置单元Udf,结构类型丢失类型信息。是否仍要恢复类型信息,java,hive,udf,Java,Hive,Udf,我的表主要有双类型列和一些字符串列。我使用行格式serde'org.openx.data.jsonserde.jsonserde' 从文本文件。 我首先使用命名的_struct函数组合这些列,并将其传递给我的udf。像这样的 select id, my_udf(named_struct("key1", col1, "key2", col2, "key3",col3, "key4", col4), other_udf_param1, other_udf_param2); 因此,col1、col2

我的表主要有双类型列和一些字符串列。我使用行格式serde
'org.openx.data.jsonserde.jsonserde'
从文本文件。 我首先使用命名的_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是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)));
                }

List是,列类型保留在字段对象检查器中。同样的行为也可以在配置单元cli上为命名的结构提供,但对于map,输入都转换为字符串