在pyspark中更改日期格式

changing date format in pyspark

我正在尝试将日期格式从 20211018 更改为 202110180000。火花数据框的一列。

我有以下代码可以从现有 data_dt

中创建新的 dt
func =  udf (lambda x: datetime.datetime.strptime(x, '%Y%m%d'), DateType())
    
result_df = result_df.withColumn('dt', func(col('data_dt')))
result_df = result_df.select('data_dt', 
                   from_unixtime(unix_timestamp('data_dt', '%Y%m%d0000')).alias('dt'))

抛出错误:

'ValueError: time data '20211018' does not match format '%Y%m%d0000''

我尝试了正确的日期格式"%Y%m%d%H%M"。它抛出其他错误。请让我知道如何解决这个问题。我想在最后默认 0000

不需要UDF。只需使用 to_date 将字符串转换为日期类型,然后应用 date_format 函数:

from pyspark.sql import functions as F

df = spark.createDataFrame([("20211018",)], ["data_dt"])

result_df = df.withColumn(
    "dt",
    F.date_format(F.to_date("data_dt", "yyyyMMdd"), "yyyyMMddHHmm")
)

result_df.show()
#+--------+------------+
#| data_dt|          dt|
#+--------+------------+
#|20211018|202110180000|
#+--------+------------+

请参阅 Datetime Patterns for Formatting and Parsing

的 Spark 文档