Pyspark将mmddyy转换为YYYYMMDD

2024-09-27 23:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

数据帧中的实际字段:

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

预期产量:

^{pr2}$

样本代码:

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'

Tags: 文件代码formatdatestring格式错误dd
2条回答

我能够在不创建udf的情况下解决它,我确实在stack上引用了一个类似的post(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))

这是可能的,不需要依赖一个缓慢的UDF。相反,通过指定正确的格式,用unix_timestamp解析数据。然后将该列转换为DateType,这将为您提供默认格式(yyyy-mm-dd):

df.withColumn('DATE_OPENED', unix_timestamp('DATE_OPENED','mmddyy').cast(DateType()))

如果您有Spark 2.2+版本,还有一种更方便的方法,to_date

^{pr2}$

相关问题 更多 >

    热门问题