#pyspark #databricks #azure-databricks
#pyspark #databricks #azure-databricks
Вопрос:
Допустим, у меня есть фрейм данных типа
df = spark.createDataFrame(
[
('Test1 This is a test Test2','This is a test'),
('That is','That')
],
['text','name'])
-------------------------- --------------
|text |name |
-------------------------- --------------
|Test1 This is a test Test2|This is a test|
|That is |That |
-------------------------- --------------
Если я применяю df.withColumn("new",F.expr("regexp_replace(text,name,'')")).show(truncate=False)
, это работает нормально и приводит к
-------------------------- -------------- ------------
|text |name |new |
-------------------------- -------------- ------------
|Test1 This is a test Test2|This is a test|Test1 Test2|
|That is |That | is |
-------------------------- -------------- ------------
Итак, допустим, у меня есть следующий фрейм данных
----------------------------- -----------------
|text |name |
----------------------------- -----------------
|Test1 This is a test( 1 Test2|This is a test( 1|
|That is |That |
----------------------------- -----------------
Если я применяю команду выше, я получаю следующее сообщение об ошибке:
исключение java.util.regex.PatternSyntaxException: висячий мета-символ ‘ amp;#39
Что я могу сделать, чтобы это исключение не возникало самым «pyspark» способом и сохраняло значение в тексте как есть?
Спасибо
Ответ №1:
Вместо regexp_replace
этого используйте replace
функцию в spark.
replace(str, search[, replace]) — заменяет все вхождения поиска на replace .
Example:
df.show(10,False)
# ----------------------------- -----------------
#|text |name |
# ----------------------------- -----------------
#|Test1 This is a test( 1 Test2|This is a test( 1|
#|That is |That |
# ----------------------------- -----------------
df.withColumn("new",expr("replace(text,name,'')")).show(10,False)
# ----------------------------- ----------------- ------------
#|text |name |new |
# ----------------------------- ----------------- ------------
#|Test1 This is a test( 1 Test2|This is a test( 1|Test1 Test2|
#|That is |That | is |
# ----------------------------- ----------------- ------------