编码 windows-1251 的 Spark-XML 问题

spark-xml problem with encoding windows-1251

提问人:Владислав Черкасов 提问时间:8/9/2023 更新时间:8/9/2023 访问量:67

问:

我在使用 spark-xml API (pyspark 2.4.0) 解析 pyspark 中的 XML 文档时遇到了问题。我有一个包含带有以下开始标签的 cyryllic 内容的文件:

<?xml version='1.0' encoding='WINDOWS-1251'?>

因此,当我尝试使用一些带有 windows-1251 编码的文本编辑器打开它时,我可以看到圆柱体文本。但是当我尝试使用以下命令将 XML 文件读入 spark 数据帧时:

df = spark.read.format('xml').options(rootTag='products', rowTag='product', charset="cp1251").load('./cp1251')

我看到奇怪的符号而不是圆柱体。但是当我将此文件转换为 UTF-8 编码时,相同的命令可以正常工作,并且我得到了带有圆柱体符号的 spark 数据帧。我觉得这个事实很奇怪,因为 cp1251 编码上的开始标签点和这种编码中的内容实际上是用这种编码编写的,但它只有在被解释为 UTF-8 时才能正常工作。

我的问题是:有没有想法为什么会发生这种情况?有没有办法将 cp1251 xml 文件直接读取到 dataframe 中而不将其转换为 UTF-8?如果没有办法,我想知道这种行为的原因。

附言如果它很重要,XML文件是嵌套的,cyryllic内容在几个级别的产品块内的某个地方。

附言如果我没有在 SparkDataframeReader 选项中提供有关编码的信息,它将读取 UTF-8 格式的文件,不要考虑开始标记中的信息。这也很奇怪,如果你对此有所了解,请给我一些信息。

xml apache-spark apache-spark-xml cp1251

评论


答:

0赞 Владислав Черкасов 8/9/2023 #1

好吧,事实上,在处理 utf-8 文档时使用 utf-8 编码是必要的......使用非 UTF 编码糟糕的原因是 Hadoop.Text 类功能:它仅支持 UTF-8 文本。(Hadoop.Text 文档)

因此,如果您使用 spark-xml,首先您需要将文件转换为 UTF-8 编码。