如何在Spark中解码HTML实体?

时间:2016-07-02 21:15:07

标签: python apache-spark pyspark apache-spark-sql

我正在将大量文本文件读入DataFrame。最初它只有一列value。文本文件使用HTML编码(即,他们有&lt;而不是<等。我想将它们全部解码回普通字符。

显然,我可以用UDF来做,但它会超级慢。

我可以试试regexp_replace,但它会更慢,因为有超过200个命名实体,每个都需要自己的regexp函数。每个regexp_replace调用都需要解析整行文本,一次搜索一个特定的编码字符。

什么是好方法?

1 个答案:

答案 0 :(得分:1)

由于您读取了纯文本输入,因此我只需跳过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)])))