Pyspark заменяет строку из столбца на основе шаблона из другого столбца - PullRequest
0 голосов
/ 30 мая 2019

У меня есть фрейм данных с текстовым столбцом и столбцом имени. Я хотел бы проверить, существует ли имя в текстовом столбце, и если это так, чтобы заменить его на какое-то значение. Я надеялся, что сработает следующее:

df = df.withColumn("new_text",regex_replace(col("text),col("name"),"NAME"))

но столбец не повторяется, поэтому он не работает. Должен ли я написать udf для этого? Как это будет выглядеть?

1 Ответ

1 голос
/ 30 мая 2019

Вы почти рядом.Вот подробный пример с опциями 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|
#+-------+-----+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...