Я новичок в Spark, и у меня возникла проблема при добавлении новых данных в раздел. Мой конвейер ежедневно передает CSV-файлы в Azure Datalake (в основном HDFS) с помощью Databricks. Я также провожу несколько простых преобразований данных и удаляю дубликаты и т. Д. Однако я заметил, что иногда параметр 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

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

Использование Spark 2.3.1

Спасибо.

2
Aaron Arima 4 Дек 2018 в 02:16

1 ответ

Лучший ответ

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

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

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

2
Manoj Singh 4 Дек 2018 в 17:12