gpt4 book ai didi

azure - Pyspark - 如何在 pyspark 中转换/Date(1593786688000+0200)/格式的日期/时间戳?

转载 作者:行者123 更新时间:2023-12-03 06:30:46 25 4
gpt4 key购买 nike

我有一个带有 CreateDate 列的数据框,格式如下:

CreateDate
/Date(1593786688000+0200)/
/Date(1446032157000+0100)/
/Date(1533904635000+0200)/
/Date(1447839805000+0100)/
/Date(1589451249000+0200)/

我想将该格式转换为日期/时间戳,因此异常(exception)的输出将是:

CreateDate
2020-07-03 14:31:28 +02:00
2015-10-28 11:35:57 +01:00
2018-08-10 12:37:15 +02:00
2015-11-18 09:43:25 +01:00
2020-05-14 10:14:09 +02:00

我在 SQL 中有这个查询,它提供了所需的输出,并且可以帮助开发:

cast(convert(VARCHAR(30), DATEADD(Second, convert(BIGINT, left(replace(replace(CreateDate, '/date(', ''), ')/', ''), 13)) / 1000, '1970-01-01 00:00:00'), 20) + ' ' + '+' + left(right(replace(replace(CreateDate, '/date(', ''), ')/', ''), 4), 2) + ':' + right(replace(replace(CreateDate, '/date(', ''), ')/', ''), 2) AS DATETIMEOFFSET(0)) AS CreateDate

有人可以帮我实现这个目标吗?

谢谢!

最佳答案

使用regexp_extract提取时间戳和时间偏移。

然后from_unixtime将秒转换为时间戳。请注意,from_unixtime 需要秒,而时间戳以毫秒为单位,这就是我们省略 000 的原因(天真地假设在您的数据中,这确实是所有记录中的零,否则你需要稍微调整一下)。

val re = """/Date\((\d+)000(\+\d+)"""

df.withColumn("ts", from_unixtime(regexp_extract($"CreateDate", re, 1)))
.withColumn("tz_offset", regexp_extract($"CreateDate", re, 2))
.show(false)
+--------------------------+-------------------+---------+
|CreateDate |ts |tz_offset|
+--------------------------+-------------------+---------+
|/Date(1593786688000+0200)/|2020-07-03 16:31:28|+0200 |
+--------------------------+-------------------+---------+

关于azure - Pyspark - 如何在 pyspark 中转换/Date(1593786688000+0200)/格式的日期/时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75256631/

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