在 Pyspark 中将字符串更改为时间戳

Posted

技术标签:

【中文标题】在 Pyspark 中将字符串更改为时间戳【英文标题】:Changing string to timestamp in Pyspark 【发布时间】:2021-02-08 19:27:10 【问题描述】:

我正在尝试将字符串列转换为 Timestamp 列,格式为:

c1 c2
2019-12-10 10:07:54.000 2019-12-13 10:07:54.000
2020-06-08 15:14:49.000 2020-06-18 10:07:54.000
from pyspark.sql.functions import col, udf, to_timestamp

joined_df.select(to_timestamp(joined_df.c1, '%Y-%m-%d %H:%M:%S.%SSSS').alias('dt')).collect()
joined_df.select(to_timestamp(joined_df.c2, '%Y-%m-%d %H:%M:%S.%SSSS').alias('dt')).collect()

当日期改变时,我想要一个新的列日期差减去 c2-c1

在 python 中我正在这样做:

df['c1']        = df['c1'].fillna('0000-01-01').apply(lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f'))

df['c2'] = df['c2'].fillna('0000-01-01').apply(lambda x:  datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f'))

df['days']     = (df['c2'] - df['c1']).apply(lambda x: x.days)

谁能帮忙转换成pyspark?

【问题讨论】:

这能回答你的问题吗? Convert pyspark string to date format 我得到 dt= None 我使用了相同的格式,我不知道几秒后我有 .000 【参考方案1】:

如果要获取日期差,可以使用datediff

import pyspark.sql.functions as F

df = df.withColumn('c1', F.col('c1').cast('timestamp')).withColumn('c2', F.col('c2').cast('timestamp'))
result = df.withColumn('days', F.datediff(F.col('c2'), F.col('c1')))
result.show(truncate=False)
+-----------------------+-----------------------+----+
|c1                     |c2                     |days|
+-----------------------+-----------------------+----+
|2019-12-10 10:07:54.000|2019-12-13 10:07:54.000|3   |
|2020-06-08 15:14:49.000|2020-06-18 10:07:54.000|10  |
+-----------------------+-----------------------+----+

【讨论】:

无需更改格式。数据框中的时间戳格式是标准的,您可以直接操作它们。 但我也想更改格式以用于其他配方 @user12063090 您可以将该列转换为时间戳,如编辑后的答案所示。

以上是关于在 Pyspark 中将字符串更改为时间戳的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js 中将字符串日期更改为时间戳?

在 Python 中将 datetime 更改为 Unix 时间戳

如何在 PySpark 中将 unix 时间戳列转换为人类可理解的时间戳? [复制]

在 Hive 中将字符串转换为日期/时间戳

在 Pyspark 中将列类型从字符串更改为日期

如何将字符串时间戳更改为人类可读的日期格式? [复制]