Skip to main content
 首页 » 编程设计

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

2024年08月19日32lexus

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

数据框中的实际字段:

+-----------+ 
|DATE_OPENED| 
+-----------+ 
|     072111| 
|     090606| 

预期输出:

+---------------+ 
|    DATE_OPENED| 
+---------------+ 
|     2011-07-21| 
|     2006-06-09| 

示例代码:

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')) 

错误:

Error : ValueError: time data '072111' does not match format '%m%d%Y' 

请您参考如下方法:

我能够在不创建 udf 的情况下解决它,我确实引用了堆栈上的类似帖子 ( pyspark substring and 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))