PySpark读取XML文件生成空DataFrame问题求助
问题描述
- 使用PySpark读取XML文件时生成空DataFrame,读取其他文件无异常
- XML结构示例:
<?xml version="1.0"?> <TAG1> <TAG2 id="ID1"> <field1>some value</field1> <field2>some value</field2> <field3></field3> </TAG2> <TAG2 id="ID2"> <field1>some value</field1> <field2></field2> <field3></field3> </TAG2> <TAG2 id="ID3"> <field1>some value</field1> <field2>some value</field2> <field3>some value</field3> </TAG2> </TAG1>
- 尝试的读取代码:
df = spark.read \ .format('com.databricks.spark.xml') \ .options(rowTag='TAG2') \ .options(nullValue='') \ .options(emptyValue='') \ .load(xmlFile)
更新:将原文件内容复制到新文件后可正常加载,问题出在原文件本身。尝试设置多种编码参数,仍无法读取原文件。
排查与解决方向
- 检查文件隐藏格式问题:原文件可能存在不可见控制字符、BOM(字节顺序标记)或换行符格式差异(如Windows/Unix换行符不兼容)。用支持显示所有字符的文本编辑器(如Notepad++)对比原文件与复制后文件的内容差异。
- 验证文件完整性:用哈希工具(如
md5sum)对比原文件和复制后文件的哈希值,确认内容是否完全一致,排查原文件是否存在损坏、截断情况。 - 强制编码与宽松解析:明确指定编码并开启宽松解析模式,尝试覆盖默认解析逻辑:
df = spark.read \ .format('com.databricks.spark.xml') \ .option('rowTag', 'TAG2') \ .option('nullValue', '') \ .option('emptyValue', '') \ .option('encoding', 'UTF-8') \ .option('parseMode', 'PERMISSIVE') \ .load(xmlFile)
- 逐行读取排查异常:先以文本格式读取原文件,逐行检查内容是否存在不符合XML结构的异常行:
text_df = spark.read.text(xmlFile) text_df.show(truncate=False)
内容的提问来源于stack exchange,提问作者cornisto
相关产品推荐
相关产品推荐

