Hive Udf, тип Struct теряет информацию о типе. Есть ли способ восстановить информацию о типе

В моей таблице в основном столбцы двойного типа и несколько столбцов строк. Я создал таблицу, используя формат строки 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)));
                }

Это возвращает все в виде строк.

Есть ли способ сохранить типы столбцов?


person swe    schedule 04.02.2017    source источник


Ответы (1)


Да, типы столбцов сохраняются в поле Object Inspector. Такое же поведение можно наблюдать на клиенте улья для named_struct, однако для карты все входные данные преобразуются в строки.

person swe    schedule 10.02.2017