在Pyspark中对日期使用regex函数
我需要验证Pyspark数据帧中的日期(字符串格式),并且需要删除日期中的附加字符和符号(如果存在)。如何像那样验证 我遇到了这个密码在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("
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”)
将其转换为日期类型非常感谢先生!你能在你的代码中更新它吗?这样我就可以接受你的正确答案了。非常感谢!