从字符串 PySpark 数据框列中删除正则表达式

Posted

技术标签:

【中文标题】从字符串 PySpark 数据框列中删除正则表达式【英文标题】:Remove Regex from string PySpark Dataframe Column 【发布时间】:2018-01-11 13:25:41 【问题描述】:

我需要从 pyspark 数据框中的一列字符串中删除正则表达式

df = spark.createDataFrame(
    [
        ("Dog 10H03", "10H03"),
        ("Cat 09H24 eats rat", "09H24"),
        ("Mouse 09H45 runs away", "09H45"),
        ("Mouse 09H45 enters room", "09H45"),
    ],
    ["Animal", "Time"],
)

时间戳,例如10H03,是必须去掉的正则表达式。

+--------------------+------------------+-----+
|              Animal| Animal_strip_time| Time|
+--------------------+------------------+-----+
|           Dog 10H03|              Dog |10H03|
|  Cat 09H24 eats rat|     Cat  eats rat|09H24|
|Mouse 09H45 runs ...|  Mouse  runs away|09H45|
|Mouse 09H45 enter...|Mouse  enters room|09H45|
+--------------------+------------------+-----+

Time 列中的时间戳可能与Animal 列中的时间戳不同。因此,它不能用于匹配字符串。

正则表达式应遵循 XXHXX 模式,其中 X 是 0-9 之间的数字

【问题讨论】:

如果time 可能不同且无法使用,为什么要在问题中包含它? 【参考方案1】:

这应该做的工作:

from pyspark.sql import functions as F

df = df.withColumn("Animal_strip_time", F.regexp_replace("Animal", r"\d\dH\d\d", ""))

df.show()
+--------------------+-----+------------------+                                 
|              Animal| Time| Animal_strip_time|
+--------------------+-----+------------------+
|           Dog 10H03|10H03|              Dog |
|  Cat 09H24 eats rat|09H24|     Cat  eats rat|
|Mouse 09H45 runs ...|09H45|  Mouse  runs away|
|Mouse 09H45 enter...|09H45|Mouse  enters room|
+--------------------+-----+------------------+

【讨论】:

以上是关于从字符串 PySpark 数据框列中删除正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 删除数据框列中的多个字符

从 pandas 数据框列中查找所有正则表达式匹配项

从 pyspark 列中删除十进制值

在pyspark数据框的列中使用正则表达式捕获两个字符串之间的第一次出现的字符串

如何在 pySpark 中有效地从字符串数据框中替换多个正则表达式模式的所有实例?

Pyspark 通过使用另一列中的值替换 Spark 数据框列中的字符串