You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PySpark读取XML文件时出现corrupt_record问题

PySpark读取XML文件仅返回corrupt_records列的解决方案

问题根源

你执行以下代码读取XML文件时,DataFrame仅生成corrupt_records列:

df_xml=spark.read.format("com.databricks.spark.xml").option("rootTag","dataset").option("rowTag","AUTHOR").load(FilePath)

核心问题是XML文件不符合语法规范:AUTHOR标签的AUTHOR_UID属性值未用引号包裹(如AUTHOR AUTHOR_UID = 1),XML标准要求所有属性值必须被单引号或双引号包裹,这直接导致Spark XML解析器无法识别文件结构,进而标记所有记录为损坏。

解决方案

方案1:修正XML文件格式(最可靠)

给所有属性值添加引号,修改后的XML示例:

<?xml version='1.0' encoding='UTF-8'?>

<dataset>
 
 <AUTHOR AUTHOR_UID="1">
    <FIRST_NAME>Fiona</FIRST_NAME>
    <MIDDLE_NAME/>
    <LAST_NAME>Macdonald</LAST_NAME>
 </AUTHOR>
 <AUTHOR AUTHOR_UID="2">
    <FIRST_NAME>Gian</FIRST_NAME>
    <MIDDLE_NAME>Paolo</MIDDLE_NAME>
    <LAST_NAME>Faleschini</LAST_NAME>
 </AUTHOR>
 <AUTHOR AUTHOR_UID="3">
    <FIRST_NAME>Laura</FIRST_NAME>
    <MIDDLE_NAME>K</MIDDLE_NAME>
    <LAST_NAME>Egendorf</LAST_NAME>
 </AUTHOR>
 <AUTHOR AUTHOR_UID="4">
    <FIRST_NAME>Jan</FIRST_NAME>
    <MIDDLE_NAME/>
    <LAST_NAME>Grover</LAST_NAME>
 </AUTHOR>
</dataset>

重新运行原代码即可正常解析,此时DataFrame会包含AUTHOR_UID、FIRST_NAME、MIDDLE_NAME、LAST_NAME列。

方案2:通过参数尝试兼容非标准XML(可选)

如果无法修改原XML文件,可尝试指定解析模式和属性前缀,让解析器尽可能读取内容:

df_xml = spark.read.format("com.databricks.spark.xml") \
    .option("rootTag", "dataset") \
    .option("rowTag", "AUTHOR") \
    .option("mode", "PERMISSIVE") \
    .option("attributePrefix", "_") \
    .load(FilePath)

注意:这种方法依赖解析器对非标准语法的容忍度,稳定性不如修正XML格式。

内容的提问来源于stack exchange,提问作者Ankit Tyagi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:18:27