Hive Udf,Struct 类型丢失类型信息。无论如何恢复类型信息
Hive Udf, Struct type loses type information. Is there anyway to recover type information
我的 table 主要有双精度类型的列和一些字符串列。我使用行格式 serde 'org.openx.data.jsonserde.JsonSerDe'
创建了 table
从一个文本文件。
我首先使用 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类型。
但它们都被转换为字符串。
这是我的评估函数的一个片段。
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)));
}
这个returns都是字符串。
有什么方法可以保留列类型?
是的,列类型保留在字段对象检查器中。在 named_struct 的 hive cli 上可以观察到相同的行为,但是对于 map,输入都被转换为字符串。
我的 table 主要有双精度类型的列和一些字符串列。我使用行格式 serde 'org.openx.data.jsonserde.JsonSerDe'
创建了 table
从一个文本文件。
我首先使用 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类型。
但它们都被转换为字符串。
这是我的评估函数的一个片段。
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)));
}
这个returns都是字符串。
有什么方法可以保留列类型?
是的,列类型保留在字段对象检查器中。在 named_struct 的 hive cli 上可以观察到相同的行为,但是对于 map,输入都被转换为字符串。