#azure #hive #azure-data-factory #parquet
Вопрос:
Файл Parquet создается из фабрики данных Azure (действие копирования — копирование из Azure SQL в паркет в озере данных). Когда я пытаюсь прочитать тот же паркет из улья, он выдает ошибку, как org.apache.parquet.io.ParquetDecodingException: Не удается прочитать значение 0 в блоке.
Если вы создаете паркет с помощью Spark, вы можете установить Spark.sql.parquet.writeLegacyFormat=true, но как обрабатывать то же самое в фабрике данных Azure.
Грядет проблема с десятичными преобразованиями
Ответ №1:
Эта проблема вызвана различными соглашениями о паркете, используемыми в Hive и Spark.
Я предполагаю, что Hive угадывает десятичную дробь как фиксированные байты, но на самом деле Spark записывает их как INT32 для 1<= точность <=9 и INT 64 для 10 <= точность
Подобные ошибки были вызваны схемой с десятичным полем. Попробуйте использовать DOUBLE вместо ДЕСЯТИЧНОЙ дроби.