在Pyspark中对日期使用regex函数

在Pyspark中对日期使用regex函数,regex,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Regex,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我需要验证Pyspark数据帧中的日期(字符串格式),并且需要删除日期中的附加字符和符号(如果存在)。如何像那样验证 我遇到了这个密码 regex_string='\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)' df.select(regexp_extract(col("

我需要验证Pyspark数据帧中的日期(字符串格式),并且需要删除日期中的附加字符和符号(如果存在)。如何像那样验证

我遇到了这个密码

regex_string='\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)'
df.select(regexp_extract(col("date"),regex_string,0).alias("cleaned_map"),col('date')).show()
下面是我的输出

+-----------+-----------+
|cleaned_map|       date|
+-----------+-----------+
|           |01/06/w2020|
|           |02/06/2!020|
| 02/06/2020| 02/06/2020|
| 03/06/2020| 03/06/2020|
| 04/06/2020| 04/06/2020|
| 05/06/2020| 05/06/2020|
| 02/06/2020| 02/06/2020|
+-----------+-----------+
我的预期产出

+-----------+-----------+
|cleaned_map|       date|
+-----------+-----------+
| 01/06/2020|01/06/w2020|
| 02/06/2020|02/06/20!20|
| 03/06/2020| 03/06/2020|
| 04/06/2020| 04/06/2020|
| 05/06/2020| 05/06/2020|
| 06/06/2020| 06/06/2020|
| 07/06/2020| 07/06/2020|
+-----------+-----------+

请尝试使用regexp\u replace删除其他字符符号

    df.show()

    # +-----------+
    # |       date|
    # +-----------+
    # |01/06/w2020|
    # |02/06/2!020|
    # | 02/06/2020|
    # +-----------+

 df.withColumn("cleaned_map", F.regexp_replace("date", r'[^\d\/]','')).show()


    # +-----------+-----------+
    # |       date|cleaned_map|
    # +-----------+-----------+
    # |01/06/w2020| 01/06/2020|
    # |02/06/2!020| 02/06/2020|
    # | 02/06/2020| 02/06/2020|
    # +-----------+-----------+
试试这个-

val df=Seq(“01/06/w2020”,
"02/06/2!020",
"02/06/2020",
"03/06/2020",
"04/06/2020",
"05/06/2020",
"02/06/2020",
“//01/0/4/202/0”).toDF(“日期”)
df.withColumn(“已清理的映射”,regexp\u替换($“日期”,“[^0-9T],”)
.withColumn(“日期类型”,至日期($“已清理地图”,“ddMMyyyy”))
.show(假)
/**
* +--------------+-----------+----------+
*|日期|清洁|地图|日期|类型|
* +--------------+-----------+----------+
*| 01/06/w2020 | 01062020 | 2020-06-01|
* |02/06/2!020   |02062020   |2020-06-02|
* |02/06/2020    |02062020   |2020-06-02|
* |03/06/2020    |03062020   |2020-06-03|
* |04/06/2020    |04062020   |2020-06-04|
* |05/06/2020    |05062020   |2020-06-05|
* |02/06/2020    |02062020   |2020-06-02|
* |//01/0/4/202/0|01042020   |2020-04-01|
* +--------------+-----------+----------+
*/

丰富此模式
“[^0-9/T]”
如果您想排除任何要删除的字符

您好,先生,谢谢您的回复。这一个适用于上述情况,但我希望它更通用。它不应该包括字符、标点符号等。@Tommy_SK,我更新了代码以替换除数字和反斜杠以外的任何内容/谢谢,先生,这对所有内容都有效,但日期//02/05/2020、02/0/5/202/0无法验证如何验证?先生,非常感谢。这几乎适用于所有情况。但是该怎么做呢//01/0/4/202/0。既然我们在模式中包含了/如何清理这类数据?我想在这种情况下,用
空字符串(“”
替换所有
/
斜杠,并使用
到日期(清理后的地图,“ddMMyyyy”)
将其转换为日期类型非常感谢先生!你能在你的代码中更新它吗?这样我就可以接受你的正确答案了。非常感谢!