首页 > 解决方案 > 从格式为 dm-yyyy(Pyspark 或 Pandans)的字符串创建 Unix 时间戳

问题描述

我有一些奇怪的(字符串)日期格式,我想在 Pyspark 中将其转换为更合理的时间戳(例如 Unix 为 YYYY-MM-DD)(Pandas 也可以)。

输入(示例):

时间戳的截图

因此,我希望使用“2021-03-17”格式而不是 17.3.2021(代表 2021 年 3 月 17 日)

“2.3.2021”代表 2021 年 3 月 2 日,应在“2021-03-02”中转换。所以问题是,1 月到 9 月的第 1 天到第 9 天,月数和天数都将显示为一位数。使用 Pyspark 中的“to_date”,它的效果不如我在 Pandas 中尝试的每个转换都会导致无效值或错误。

非常感谢您提前

标签: pandasdatedatetimepyspark

解决方案


使用from_unixtime,unix_timestamp函数。

df.show()
#+--------+
#|      dt|
#+--------+
#|2.3.2021|
#+--------+

from pyspark.sql.functions import *


#from spark3
spark.sql("set spark.sql.legacy.timeParserPolicy=LEGACY")
df.withColumn("dt",from_unixtime(unix_timestamp(col("dt"),"dd.mm.yyyy"),"yyyy-mm-dd")).\
show()
#+----------+
#|        dt|
#+----------+
#|2021-03-02|
#+----------+

#casting as date type
from pyspark.sql.types import *
df.withColumn("dt",from_unixtime(unix_timestamp(col("dt"),"dd.mm.yyyy"),"yyyy-mm-dd").cast("date")).\
show()
#+----------+
#|        dt|
#+----------+
#|2021-03-02|
#+----------+

推荐阅读