【发布时间】:2019-01-29 05:08:45
【问题描述】:
在pyspark中,可以通过传递时间戳和时区to the functionfrom_utc_timestamp从UTC时间获取本地时间
>>> df = spark.createDataFrame([('1997-02-28 10:30:00',)], ['t'])
>>> df.select(from_utc_timestamp(df.t, "PST").alias('t')).collect()
[Row(t=datetime.datetime(1997, 2, 28, 2, 30))]
此处的时区以字符串文字 ("PST") 的形式提供。如果有以下数据结构:
+--------------------------+---------+
| utc_time |timezone |
+--------------------------+---------+
| 2018-08-03T23:27:30.000Z| PST |
| 2018-08-03T23:27:30.000Z| GMT |
| 2018-08-03T23:27:30.000Z| SGT |
+--------------------------+---------+
如何实现以下新列(最好没有 UDF)?
+--------------------------+-----------------------------------+
| utc_time |timezone | local_time |
+--------------------------+-----------------------------------+
| 2018-08-03T23:27:30.000Z| PST | 2018-08-03T15:27:30.000 |
| 2018-08-03T23:27:30.000Z| GMT | 2018-08-04T00:27:30.000 |
| 2018-08-03T23:27:30.000Z| SGT | 2018-08-04T07:27:30.000 |
+--------------------------+-----------------------------------+
【问题讨论】:
-
您可以在this post 上使用该方法,但
from_utc_timestamp似乎不像GMT或SGT(返回时间戳列不变)。 -
看起来使用 3 个字母的时区已被弃用。谢谢@pault
标签: python datetime apache-spark pyspark apache-spark-sql