Как исправить несогласованные схемы в разделе паркетных файлов с помощью Spark

Я новичок в спарке и столкнулся с проблемой при добавлении новых данных в раздел. Мой конвейер вводит ежедневные CSV-файлы в Azure Datalake (в основном HDFS), используя блоки данных. Я также выполняю несколько простых преобразований данных, удаляю дубликаты и т. Д. Однако я заметил, что иногда inferSchema=True Параметр не всегда лучший и иногда создает несоответствия в схемах между разделенными файлами. Когда я иду, чтобы прочитать все файлы:

df = sqlContext.read.parquet("path/to/directory")

Я поражен:

Parquet column cannot be converted in file path/to/directory/file
Column: [Ndc], Expected: LongType, Found: BINARY

У меня есть тонна разбитых на разделы файлов, и я просматриваю каждый из них, чтобы определить, совпадает ли схема, и исправление каждого из них, вероятно, неэффективно. Существует ли простой способ применения схемы, в которую будут преобразованы все файлы, или вам буквально приходится перебирать каждый файл паркета и изменять схему?

Использование искры 2.3.1

Благодарю.

1 ответ

Решение

Вы можете попробовать два варианта.

  1. У вас есть опция "mergeSchema" для объединения двух файлов с разными схемами https://spark.apache.org/docs/2.3.1/sql-programming-guide.html

  2. Цикл каждого отдельного файла, используйте inferSchema при чтении, а затем явно приведите к общей схеме и выполните обратную запись в другое место

Другие вопросы по тегам