在pyspark中匹配一组停止词并替换为空白

vs3odd8k  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(368)

我在一个表中有地址列,如下所示

>>> spark.sql("select add1 from test").show(10,False)
+---------------------------+
|add1                       |
+---------------------------+
|PO BOX 1111DUBAI  UAE      |
|P.O. BOX 2222DUBAI - U.A.E|
+---------------------------+

为了便于比较,我不得不把这组单词从专栏中删除
我可以用下面的空格代替一个单词(在本例中为“阿联酋”)

spark.sql("select regexp_replace(add1,'UAE','') from test").show(10,False)
+---------------------------+
|regexp_replace(add1, UAE, )|
+---------------------------+
|PO BOX 1111DUBAI           |
|P.O. BOX 2222DUBAI - U.A.E|
+---------------------------+

但我想删除所有特殊字符和一组停止词,如{'uae','u.a.e','u a e','po','po'}
期望输出:

spark.sql("select regexp_replace(add1,'UAE','') from test").show(10,False)
+---------------------------+
|regexp_replace(add1, UAE, )|
+---------------------------+
|1111DUBAI                  |
|2222DUBAI                  |
+---------------------------+

有人能帮我做到这一点,请,谢谢!

doinxwow

doinxwow1#

你可以这样做。希望它能解决你所有的案子。

from pyspark.sql import functions as F

stop_words = {'UAE','U.A.E', 'U A E', 'PO', 'P O', 'BOX'}

df2 = df.withColumn(
    "add1",
    F.regexp_replace(F.col("add1"), r"[^a-zA-Z0-9\s]", "")
)

for stop_word in stop_words: 
    df2 = df2.withColumn(
        "add1",
        F.trim(F.regexp_replace(F.col("add1"), stop_word, ""))
    )

df2.show()

+---------+
|     add1|
+---------+
|1111DUBAI|
|2222DUBAI|
+---------+

相关问题