问题描述
我正在尝试将数据帧保存到 Azure Synapse 表中,但出现以下错误:
com.microsoft.sqlserver.jdbc.sqlServerException: 107096;从 bcp 客户端收到一个无效的列长度,用于 colid...
问题在于我的数据框中的时间戳列,如下所示:2011-01-27T06:48:04.000+0000
。但是,Synapse 中的目标列是 datatime2 类型,最大长度为 8。
为此我尝试过
.withColumn("myTimestampColumn",to_timestamp(col("myTimestampColumn"),"yyyy-MM-dd HH:mm:ss"))
但格式不会改变。
有人知道如何解决这个问题吗?
需要注意的几点:
- 如果数据框列是时间戳,Synapse 只会接受交易,目标列是 datetime2
- 我正在使用 spark 2.4.5
解决方法
如果您在 Spark 中的日期时间列具有标准格式(例如 2011-01-27T06:48:04.000+0000
),您可以直接转换为时间戳,这将导致格式为 yyyy-MM-dd HH:mm:ss
。
df2 = df.withColumn("myTimestampColumn",col("myTimestampColumn").cast("timestamp"))
然后您可以将 df2
保存到您的表中。