我有一个Spark / Databricks作业,可将数据从数据砖文件系统(AVRO文件)移至Azure SQL数据库。使用JDBC可以很好地完成此工作(从文件存储中读取数据帧,然后将其写入JDBC目标),但是有点慢。
Microsoft提供了具有批量复制功能的SQLDB Spark驱动程序。如果我使用此驱动程序并调用.write()方法,那么一切都会按预期进行:
df.write.mode(SaveMode.Overwrite).sqlDB(bulkCopyConfig)
但是,如果我使用批量复制:
df.bulkCopyToSqlDB(bulkCopyConfig)
驱动程序似乎无法正确处理日期字段:
om.microsoft.sqlserver.jdbc.SQLServerException:从字符串转换日期和/或时间时转换失败。
我已验证数据框架构和表元数据是否“正确”或至少符合预期; .write()方法创建的表布局选择Azure SQL datetime字段作为日期值,因此在为bulkCopy(.write()将为表做准备)时,我使用了相同的结构,.bulkCopyToSqlDB似乎想要表已经存在)。
关于如何获取bulkCopy正确解释/转换日期的任何想法?我是否需要先将它们转换为数据帧中其他格式的字符串?