我正在将大量文本文件读取到 DataFrame 中。最初它只有一列,
value
。文本文件使用 HTML 编码(即,它们具有 <
而不是 <
等)。我想将它们全部解码回正常字符。
显然,我可以使用 UDF 来完成,但速度会非常慢。
我可以尝试 regexp_replace,但它会更慢,因为有超过 200 个命名实体,并且每个实体都需要自己的 regexp 函数。每个 regexp_replace 调用都需要解析整行文本,一次搜索一个特定的编码字符。
什么是好的方法?
由于您读取纯文本输入,我将简单地跳过 UDF 部分并在初始处理后将数据传递给 JVM。使用 Python 3.4+:
import html
from pyspark.sql.types import StringType, StructField, StructType
def clean(s):
return html.unescape(s),
(sc.textFile("README.md")
.map(clean)
.toDF(StructType([StructField("value", StringType(), False)])))
Spark 3.5.0+现在有内置函数