spark topandas无法正确处理utc时区

jdzmm42g  于 2021-05-19  发布在  Spark
关注(0)|答案(0)|浏览(274)

我已将spark会话设置为使用utc时区,但当我使用utc时区时 df.toPandas() ,有时转换不正确。
Pypark shell中的最小复制器:

import pyspark.sql.functions as F
import pyspark.sql.types as T
spark.conf.set('spark.sql.session.timeZone', 'UTC')
df = spark.createDataFrame(["2019-10-26 00:15:00",
                            "2019-10-27 00:15:00",
                            "2019-10-27 01:15:00"], T.StringType())
df = df.select(F.col('value').cast('timestamp'))
pdf = df.toPandas()
df.show()
pdf.head()

哪些输出

>>> df.show()
+-------------------+                                                           
|              value|
+-------------------+
|2019-10-26 00:15:00|
|2019-10-27 00:15:00|    <- this is different...
|2019-10-27 01:15:00|
+-------------------+

>>> pdf.head()
                value
0 2019-10-26 00:15:00
1 2019-10-27 01:15:00    <- from this
2 2019-10-27 01:15:00

我怀疑问题的根源是, df.toPandas() 电话 df.collect() (https://github.com/apache/spark/blob/master/python/pyspark/sql/pandas/conversion.py#l133),它返回本地机器时区(欧洲/伦敦)中的python datetime对象。

>>> df.collect()
[Row(value=datetime.datetime(2019, 10, 26, 1, 15)),
 Row(value=datetime.datetime(2019, 10, 27, 1, 15)),
 Row(value=datetime.datetime(2019, 10, 27, 1, 15, fold=1))]

当spark试图将其转换回spark会话时区时,它无法正确处理该时区。对如何处理这个问题有什么建议吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题