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

Posted

技术标签:

【中文标题】Pyspark 通过使用另一列中的值替换 Spark 数据框列中的字符串【英文标题】:Pyspark replace strings in Spark dataframe column by using values in another column 【发布时间】:2018-02-20 00:55:46 【问题描述】:

我想通过从另一列创建搜索字符串来替换列中存在的值

之前 id address st 1 2.PA1234.la 1234 2 10.PA125.la 125 3 2.PA156.ln 156 id address st 1 2.PA9999.la 1234 2 10.PA9999.la 125 3 2.PA9999.ln 156 我试过了

df.withColumn("address", regexp_replace("address","PA"+st,"PA9999"))
df.withColumn("address",regexp_replace("address","PA"+df.st,"PA9999")

两个接缝都失败了

TypeError: 'Column' object is not callable

可能类似于 Pyspark replace strings in Spark dataframe column

【问题讨论】:

正则表达式:(?<=PA)[^\.]+,替换:9999 非常感谢@S.Jovan,它按预期工作:) 【参考方案1】:

您也可以使用 spark udf。

当您需要使用另一列中的值修改数据框条目时,可能会应用该解决方案:

from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

pd_input = pd.DataFrame('address': ['2.PA1234.la','10.PA125.la','2.PA156.ln'],
             'st':['1234','125','156'])

spark_df = sparkSession.createDataFrame(pd_input)


replace_udf = udf(lambda address, st: address.replace(st,'9999'), StringType())

spark_df.withColumn('adress_new',replace_udf(col('address'),col('st'))).show()

输出:

+-----------+----+------------+
|     adress|  st|  adress_new|
+-----------+----+------------+
|2.PA1234.la|1234| 2.PA9999.la|
|10.PA125.la| 125|10.PA9999.la|
| 2.PA156.ln| 156| 2.PA9999.ln|
+-----------+----+------------+

【讨论】:

以上是关于Pyspark 通过使用另一列中的值替换 Spark 数据框列中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

基于另一列中的值的一列上的pyspark滞后函数

如何根据 PySpark 数据框的另一列中的值修改列? F.当边缘情况

使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值

Pyspark:如何根据另一列中的匹配值从数组中的第一次出现中选择直到最后的值

用另一列中的值替换缺失值

Power Query / Power BI - 用另一列中的值替换空值