У меня есть задание 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, кажется, хочет таблица уже существует).
Есть какие-нибудь идеи о том, как заставить массовую копию правильно интерпретировать / преобразовать даты? Нужно ли сначала преобразовывать их в строки в кадре данных в другом формате?