regexp_replace 在 PySpark 上用于两列

regexp_replace on PySpark used on two columns

我想在 PySpark 中基于两列执行非典型 regexp_replace:我在一个属性中有地址,在另一个属性中有城市,我想使用城市属性将其删除从地址,什么时候出现。我写了一个函数来做到这一点:

df = spark.createDataFrame(
[
    (1, 'hügelstrasse 34, ansbach', 'ansbach'),
    (2, 'panton st. 2, london', 'london')
],
   ('id', 'address', 'city')
)

def dropCityAddress(street, city):

    new = regexp_replace(street, city, '')

    return(new)

df.withColumn('newaddress', dropCityAddress(col('address'), col('city')))

但是城市对象是不可迭代的。 所需的输出将是地址中没有城市的新列(我对逗号或其他内容不感兴趣,只是删除城市)。我将在大型数据库上执行此任务,因此基于收集操作之类的解决方案不适合此问题。

有没有办法执行这个任务?

检查下面的代码。

df.withColumn("newaddress",expr("regexp_replace(address,city,'')")).show(false)
+---+------------------------+-------+-----------------+
|id |address                 |city   |newaddress       |
+---+------------------------+-------+-----------------+
|1  |hügelstrasse 34, ansbach|ansbach|hügelstrasse 34, |
|2  |panton st. 2, london    |london |panton st. 2,    |
+---+------------------------+-------+-----------------+