gpt4 book ai didi

windows - Pyspark to_date() 函数在 Windows 和 WSL Ubuntu 上给出了不同的答案

转载 作者:行者123 更新时间:2023-12-03 11:07:33 26 4
gpt4 key购买 nike

我有一个函数可以将 int 转换为日期,然后将该日期输入 datediff 以查找事件发生后的天数。我们的一项测试在 PySpark Windows 和我们的 Azure DevOps 管道中通过,但在 WSL Ubuntu 中的 PySpark 上运行时失败。我们已将范围缩小到 to_date()函数在两个平台上产生不同的结果,但不明白为什么。

import pyspark.sql.functions as F
import datetime
def from_int_to_date(int_date: int) -> datetime.datetime:
"""
Convert an integer in YYYYMMDD format into a datetime object
"""
return datetime.datetime.strptime(str(int_date), "%Y%m%d")

如果我计算 F.to_date(F.lit(from_int_to_date(20190401)))我得到 Column<b"to_date(TIMESTAMP '2019-04-01 00:00:00')">在 Windows 和 Column<b"to_date(TIMESTAMP('2019-03-31 23:00:00.0'))>在 WSL 下运行的版本上。

我住在英国,2019 年 4 月 1 日,我们更改了夏季的时钟,这样我就可以理解时钟倒退一个小时的原因,因为输入 int 20190331 不会出现问题。我只是想了解为什么 to_date() 的行为在两个系统上不同,以及我们应该采取什么措施来缓解这种情况(以及任何其他差异),因为理想情况下我们的代码将与平台无关。

最佳答案

使用配置 spark.sql.session.timeZone 将时区设置为 spark 驱动程序,这样您就不会依赖于系统时钟。

spark.conf.set("spark.sql.session.timeZone", "Europe/London")

即使在创建 spark session 时也可以设置此选项。

关于windows - Pyspark to_date() 函数在 Windows 和 WSL Ubuntu 上给出了不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61656862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com