简体   繁体   English

更改 pyspark 中的日期格式

[英]changing date format in pyspark

I am trying to change date format from 20211018 to 202110180000 .我正在尝试将日期格式从20211018更改为202110180000 of a column of a spark data frame.火花数据框的一列。

I have the following code to create new dt column out of existing data_dt我有以下代码从现有的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'))

which throws a error:引发错误:

'ValueError: time data '20211018' does not match format '%Y%m%d0000'' 'ValueError:时间数据'20211018'与格式'%Y%m%d0000'不匹配

I tried the correct format of date "%Y%m%d%H%M" .我尝试了正确的日期格式"%Y%m%d%H%M" It throws other error.它会引发其他错误。 Please let me know how to fix this.请让我知道如何解决这个问题。 I want defaulted 0000 at the end.我希望最后默认为0000

No need for UDF.不需要UDF。 Simply cast the string into date type using to_date then apply date_format function:只需使用to_date将字符串转换为日期类型,然后应用date_format function:

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|
#+--------+------------+

See Spark docs for Datetime Patterns for Formatting and Parsing有关格式化和解析的日期时间模式,请参阅 Spark 文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM