Pyspark - 将 mmddyy 转换为 YYYY-MM-DD

Shr*_*ant 2 python datetime apache-spark pyspark pyspark-sql

我正在处理一个大文件,其中一个字段为 mmddyy 格式,数据类型为字符串,我需要将其转换为 YYYY-MM-DD。我确实尝试过创建 UDF 并转换引用其中一篇文章,但它抛出错误。示例代码:

数据框中的实际字段:

+-----------+
|DATE_OPENED|
+-----------+
|     072111|
|     090606|
Run Code Online (Sandbox Code Playgroud)

预期输出:

+---------------+
|    DATE_OPENED|
+---------------+
|     2011-07-21|
|     2006-06-09|
Run Code Online (Sandbox Code Playgroud)

示例代码:

func =  udf (lambda x: datetime.strptime(x, '%m%d%Y'), DateType())

newdf = olddf.withColumn('open_dt' ,date_format(func(col('DATE_OPENED')) , 'YYYY-MM-DD'))
Run Code Online (Sandbox Code Playgroud)

错误:

Error : ValueError: time data '072111' does not match format '%m%d%Y'
Run Code Online (Sandbox Code Playgroud)

Shr*_*ant 5

我能够在不创建udf 的情况下解决它,我确实在堆栈上参考了类似的帖子(pyspark substring 和aggregation)并且它运行得很好。

from pyspark.sql.functions import *
format = 'mmddyy'
col = unix_timestamp(df1['DATE_OPENED'], format).cast('timestamp')
df1 = df1.withColumn("DATE_OPENED", col)

df2 = df.withColumn('open_dt', df['DATE_OPENED'].substr(1, 11))
Run Code Online (Sandbox Code Playgroud)