Pyspark:to_timestamp返回不正确的时间戳值[重复]

Posted

技术标签:

【中文标题】Pyspark:to_timestamp返回不正确的时间戳值[重复]【英文标题】:Pyspark: to_timestamp return incorrect timestamp value [duplicate] 【发布时间】:2021-01-17 08:24:17 【问题描述】:

我刚刚学习了一些基本的 pyspark。我试图学习如何使用 to_timestamp 将 StringType 转换为 TimestampType 以下是我的示例数据

data = [(1,'10/06/2019 02:00:00 AM')]
schema = ['id','datetime']
df_test = spark_session.createDataFrame(data=data,schema=schema)
df_test = df_test.withColumn('datetime',f.to_timestamp(f.col('datetime'), 'MM/dd/yyyy KK:mm:ss a'))

我认为它会是什么样子

+---+-------------------+
| id|           datetime|
+---+-------------------+
|  1|2019-10-06 02:00:00|
+---+-------------------+

相反,df_test 看起来像这样

+---+-------------------+
| id|           datetime|
+---+-------------------+
|  1|2019-10-06 03:00:00|
+---+-------------------+

有人能说明这是怎么发生的吗?

【问题讨论】:

【参考方案1】:

我想你在澳大利亚 ;) 这两个时间实际上是相同的(!),因为由于夏令时,时钟在凌晨 2 点提前了一小时。

import pyspark.sql.functions as f

spark.sql("set spark.sql.session.timeZone = AET")

data = [(1,'10/06/2019 01:00:00 AM'), (2,'10/06/2019 01:59:00 AM'),
        (3,'10/06/2019 02:00:00 AM'), (4,'10/06/2019 03:00:00 AM')]
schema = ['id','datetime']
df_test = spark.createDataFrame(data=data,schema=schema)

df_test.withColumn('datetime',f.to_timestamp(f.col('datetime'), 'MM/dd/yyyy KK:mm:ss a')).show()
+---+-------------------+
| id|           datetime|
+---+-------------------+
|  1|2019-10-06 01:00:00|
|  2|2019-10-06 01:59:00|
|  3|2019-10-06 03:00:00|
|  4|2019-10-06 03:00:00|
+---+-------------------+

【讨论】:

以上是关于Pyspark:to_timestamp返回不正确的时间戳值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pyspark when else 语句返回不正确的输出

在 Pyspark 中返回错误结果的 Impala 查询

Pyspark 列:将字符串格式的数据转换为时间戳格式

Pandas UDF (PySpark) - 不正确的类型错误

如何修复:pyspark.sql.utils.IllegalArgumentException:列功能的类型不正确?

pyspark udf 返回值