首页 > 解决方案 > 如何在 pyspark 数据框中转换“DD/MM/YYYY”格式的日期?

问题描述

我有一个数据框:

|2018/12/04|    mop-MD00094(Kg.)|      2500.0|  147.0|       367500.0|
|2018/12/04|    RSE-RM00014(Kg.)|     29000.0|   18.8|       545200.0|
|13/04/2018| BETAIN-MD00032(Kg.)|       200.0|  177.0|        35400.0|
|13/04/2018|    MGL-RM00005(Kg.)|     25000.0|   42.5|      1115625.0|
|13/04/2018|    MZE-RM00007(Kg.)|     24750.0|   14.1|       348975.0|

在这里,您可以看到前两行的日期格式为 YYYY/DD/MM 格式,其余为 DD/MM/YYYY 格式,我想将所有这些更改为 DD/MM/YYYY 格式。这该怎么做?

架构是:

root
 |-- sDate: string (nullable = true)
 |-- Items: string (nullable = true)
 |-- purchasedQTY: double (nullable = true)
 |-- rate: double (nullable = true)
 |-- purchasedVolume: double (nullable = true)

标签: pythonapache-sparkpysparkdate-formatting

解决方案


使用regexp_replace

df.withColumn("sDate", regexp_replace($"sDate", "([0-9]{4})/([0-9]{2})/([0-9]{2})", "$2/$3/$1"))

正则表达式将匹配三个捕获组中的年、月和日。重新安排的日期将用于替换旧日期。由于正则表达式只会将字符串与要替换的格式匹配,因此其他行不会发生任何事情。


推荐阅读