pyspark udf clean html tags получение ошибок типа - PullRequest
0 голосов
/ 01 июня 2019

Я новичок в pyspark, и у меня возникают проблемы с преобразованием функций python в pyspark udf.

У меня есть df, как показано ниже

+--------------------+
|             summary|
+--------------------+
|<p>test test </p>   |
|<a>test test </a>   |
|<p>test test </p>   |
+--------------------+

Я хотел очистить HTML-теги в summary. Я создал udf как показано ниже

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html(df.summary))

но появляется следующая ошибка при запуске: TypeError: Invalid argument, not a string or column

Какой правильный способ сделать это?

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Вы можете избежать использования функции udf и использовать напрямую regexp_replace

# First import regexp_replace
from pyspark.sql.functions import regexp_replace

# Creates the dataframe 
# [...]

# Pass the column, regex and replacement value
df = df.withColumn('clean', regexp_replace(df.summary, r'<.*?>', ''))

df.show()

Вывод:

+-----------------+----------+
|          summary|     clean|
+-----------------+----------+
|<p>test test </p>|test test |
|<a>test test </a>|test test |
+-----------------+----------+

Перед созданием UDF всегда проверяйте, есть ли встроенная функцияот Spark, чтобы удовлетворить ваши требования.

Python UDF оказывает влияние на производительность JVM, это упомянуто в их книге Spark The Definitive Guide, и здесь есть обсуждение, которое вы также можете увидеть: Функции Spark противПроизводительность UDF?

1 голос
/ 02 июня 2019

Вы неправильно передаете столбец в UDF! Попробуйте это:

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html("summary"))

или это:

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html(col("summary")))

и результат:

+-----------------+----------+
|          summary|     clean|
+-----------------+----------+
|<p>test test </p>|test test |
|<a>test test </a>|test test |
+-----------------+----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...