我有一个带有文本列和名称列的数据框。我想检查名称是否在文本列中,以及是否确实将其替换为某些值。 我希望以下方法能起作用:
df = df.withColumn("new_text",regex_replace(col("text),col("name"),"NAME"))
但是Column不可迭代,因此不起作用。我需要写udf来做到这一点吗?看起来怎么样?
答案 0 :(得分:1)
您快要接近了。以下是带有withColumn
和selectExpr
选项的详细示例:
样本df
df = spark.createDataFrame([('This is','This'),
('That is','That'),
('That is','There')],
['text','name'])
#+-------+-----+
#| text| name|
#+-------+-----+
#|This is| This|
#|That is| That|
#|That is|There|
#+-------+-----+
选项1: withColumn
使用expr
功能
from pyspark.sql.functions import expr, regexp_replace
df.withColumn("new_col1",expr("regexp_replace(text,name,'NAME')")).show()
#+-------+-----+--------+
#| text| name|new_col1|
#+-------+-----+--------+
#|This is| This| NAME is|
#|That is| That| NAME is|
#|That is|There| That is|
#+-------+-----+--------+
选项2: selectExpr
使用regexp_replace
from pyspark.sql.functions import regexp_replace
df.selectExpr("*",
"regexp_replace(text,name,'NAME') AS new_text").show()
#+-------+-----+--------+
#| text| name|new_text|
#+-------+-----+--------+
#|This is| This| NAME is|
#|That is| That| NAME is|
#|That is|There| That is|
#+-------+-----+--------+