apache-spark - pyspark udf clean html标签得到typeerror
问题描述
我是 pyspark 的新手,我无法将 python 函数转换为 pyspark udf。
我有一个 df 如下
+--------------------+
| summary|
+--------------------+
|<p>test test </p> |
|<a>test test </a> |
|<p>test test </p> |
+--------------------+
我想清理 .html 中的 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
这样做的正确方法是什么?
解决方案
可以避开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 提供的原生函数来解决您的需求。
PythonUDF
对 JVM 的性能有影响,这在他们的书中有所提及Spark The Definitive Guide
,您也可以在此处看到讨论:Spark 函数与 UDF 性能?
推荐阅读
- python - 如何从数据框中的字符串创建列?
- node.js - 错误:EPERM:不允许操作,打开 \TestAutomation\cypress.json'
- llvm - 如何获得 llvm IR 模块的依赖关系?
- python - 如何在绘图右侧绘制直方图作为子图
- python - scipy约束下的Python优化问题
- spring-boot - 在 http 上提供静态文件,在 https 上提供其他文件
- c# - 控制器调用错误的 RazorViewEngine
- javascript - 如何编写使用第三方 API 的 HTTP 请求?
- ios - 在设备上训练声音分类器
- asp.net - 当 Blazor wasm 中存在 CSP 标头或元标记时,如何获取浏览器计算的被阻止脚本的哈希值