首页 > 解决方案 > 如何使用 Pyspark 加载雪花表,我的 Dataframe 的日期列应反映为 TIMESTAMP_LTZ 格式

问题描述

如果我想将数据帧写入雪花表,考虑到该表在雪花中已经不存在,而且我在数据帧中的时间戳列在存储时应该反映为雪花中的 TIMESTAMP_LTZ 格式。

注意:我不会将时间戳数据格式更改为雪花中的 TIMESTAMP_LTZ,我希望一切都发生在我的 spark 代码本身中。

编辑:

我看到的行为是雪花表的数据类型为 TIMESTAMP_NTZ

标签: apache-sparkpysparkapache-spark-sqlsnowflake-cloud-data-platformazure-databricks

解决方案


我看到的行为是雪花表的数据类型为 TIMESTAMP_NTZ

该遵守遵循雪花的Spark 连接器文档中描述的默认行为:

“默认时间戳数据类型映射为 TIMESTAMP_NTZ(无时区),因此您必须显式设置 TIMESTAMP_TYPE_MAPPING 参数才能使用 TIMESTAMP_LTZ。”

Spark 连接器中的TIMESTAMP数据类型映射将映射到TIMESTAMP_LTZ底层类型,而不是在执行 CREATE/INSERT 操作之前将TIMESTAMP_NTZ其明确指定为会话级别参数 ( )。TIMESTAMP_TYPE_MAPPING

会话级参数可以用 Spark 代码表示,不需要永久更改帐户上的任何设置。只需将其作为选项添加到 Spark 代码中与 Snowflake 交互时传递的选项映射中。一个简单的例子如下:

sfOptions += ("TIMESTAMP_TYPE_MAPPING" -> "TIMESTAMP_LTZ")
// Pass this adjusted sfOptions to the .options(…) when writing the DataFrame

推荐阅读