在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|
#+--------+------------+
的 Spark 文档
我正在尝试将日期格式从 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|
#+--------+------------+
的 Spark 文档