Azure Databricks BulkMoveToSql Проблема преобразования даты / времени - PullRequest
0 голосов
/ 06 мая 2019

У меня есть задание Spark / Databricks, которое перемещает данные из файловой системы блоков данных (файлы AVRO) в базу данных SQL Azure. Выполнение этого с JDBC работает нормально (чтение фрейма данных из файлового хранилища, запись его в целевой объект JDBC), но немного медленное.

Microsoft предоставляет драйвер SQLDB Spark с функцией массового копирования. Если я использую этот драйвер и вызываю метод .write (), все работает как положено:

df.write.mode (SaveMode.Overwrite) .sqlDB (bulkCopyConfig)

Однако, если я использую массовую копию:

df.bulkCopyToSqlDB (bulkCopyConfig)

Похоже, что драйвер неправильно обрабатывает поля даты:

om.microsoft.sqlserver.jdbc.SQLServerException: преобразование не выполнено при преобразовании даты и / или времени из символьной строки.

Я подтвердил, что схема фрейма данных и метаданные таблицы являются "правильными" или, по крайней мере, как ожидалось; макет таблицы, создаваемый методом .write (), выбирает поле даты-времени Azure SQL для значений даты, поэтому я использовал эту же структуру при подготовке таблицы для bulkCopy (.write () создаст таблицу, а .bulkCopyToSqlDB, кажется, хочет таблица уже существует).

Есть какие-нибудь идеи о том, как заставить массовую копию правильно интерпретировать / преобразовать даты? Нужно ли сначала преобразовывать их в строки в кадре данных в другом формате?

...