如何在使用PySpark将日期和时间字符串转换为时间戳时保留毫秒?

2024-04-26 02:41:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将包含日期和时间的列转换为时间戳,但是在转换过程中丢失了毫秒部分。

数据

我有一个Spark dataframedf,它有一个包含字符串的日期和时间列。时间字符串包含毫秒,如下所示:

+---------+------------+
|date     |time        |
+---------+------------+
|2018/1/2 |09:53:25.864|
|2018/1/3 |11:32:21.689|
|2018/1/4 |09:34:51.045|
+---------+------------+

我尝试了什么

我将datetime列串联起来,得到date_and_time列(字符串):

^{pr2}$

输出:

+--------+------------+---------------------+
|date    |time        |date_and_time        |
+--------+------------+---------------------+
|2018/1/2|09:53:25.864|2018/1/2 09:53:25.864|
|2018/1/3|11:32:21.689|2018/1/3 11:32:21.689|
|2018/1/4|09:34:51.045|2018/1/4 09:34:51.045|
+--------+------------+---------------------+

然后,我使用Simple Date Format Date and Time patterns指定时间戳格式:

timestamp_format = 'yyyy/M/d HH:mm:ss.SSS'

然后,我尝试使用两种不同的方法将此字符串转换为时间戳:

df.select(
    df.date_and_time,
    F.to_timestamp(df.date_and_time, timestamp_format).alias('method_1'),
    F.unix_timestamp(df.date_and_time, format=timestamp_format).cast('timestamp').alias('method_2')
).show(3, False)

如下所示,时间戳缺少毫秒部分:

+---------------------+-------------------+-------------------+
|date_and_time        |method_1           |method_2           |
+---------------------+-------------------+-------------------+
|2018/1/2 09:53:25.864|2018-01-02 09:53:25|2018-01-02 09:53:25|
|2018/1/3 11:32:21.689|2018-01-03 11:32:21|2018-01-03 11:32:21|
|2018/1/4 09:34:51.045|2018-01-04 09:34:51|2018-01-04 09:34:51|
+---------------------+-------------------+-------------------+

如何在将字符串转换为时间戳时保留毫秒?

使用Python:Spark(Python:Spark:Python.6.1.1)。

我看了以前回答过的问题,没有找到合适的解决办法。


Tags: and数据字符串formatdfdatetime过程