Столбец паркета не может быть преобразован: ожидаемый десятичный, найденный двоичный - PullRequest
1 голос
/ 17 июня 2019

Я использую Apache Nifi 1.9.2 для загрузки данных из реляционной базы данных в Google Cloud Storage. Цель состоит в том, чтобы записать результат в файлы Parquet, поскольку он хранит данные в столбчатой ​​форме. Для этого я использую процессор ConvertAvroToParquet (настройки по умолчанию) в Nifi (за ним следует процессор PutGCSObject). Проблема с этими результирующими файлами заключается в том, что я не могу прочитать столбцы с десятичным типом при использовании файлов в Spark 2.4.0 (scala 2.11.12): столбец паркета не может быть преобразован ... Столбец: [ARHG3A], ожидаемый: десятичный (2, 0), найдено: BINARY

Ссылки на примеры файлов parquet / avro: https://drive.google.com/file/d/1PmaP1qanIZjKTAOnNehw3XKD6-JuDiwC/view?usp=sharing https://drive.google.com/file/d/138BEZROzHKwmSo_Y-SNPMLNp0rj9ci7q/view?usp=sharing

Поскольку я знаю, что Nifi работает с форматом Avro между процессорами внутри потокового файла, я также написал файл avro (как это было непосредственно перед процессором ConvertAvroToParquet), и это я могу прочитать в Spark. Также возможно не использовать логические типы в Avro, но тогда я теряю типы столбцов в конце, и все столбцы являются строками (не предпочтительно). Я также безуспешно экспериментировал с процессором PutParquet.

val arhg_parquet = spark.read.format("parquet").load("ARHG.parquet")
arhg_parquet.printSchema()
arhg_parquet.show(10,false)

printSchema () дает правильный результат, указывая, что ARHG3A является десятичным (2,0) Выполнение show (10, false) приводит к ОШИБКЕ: невозможно преобразовать столбец Parquet в файл file: /// C: /ARHG.parquet. Колонка: [ARHG3A], ожидаемая: десятичная (2,0), найдено: BINARY

...