PySpark使用spark-xml解析带XSD的XML遇maxOccurs限制报错求助
解决Spark-XML解析XSD时maxOccurs超过5000的限制问题
错误根源是JDK内置XML解析器默认限制maxOccurs属性值不超过5000,而spark-xml依赖该解析器做XSD校验,因此需要调整JVM参数解除限制。以下是Databricks环境下的可行解决方案:
方案1:集群级永久配置
- 进入Databricks集群配置页面,打开高级选项 -> Spark标签页
- 在Spark配置文本框中添加两行配置:
spark.driver.extraJavaOptions -Djdk.xml.maxOccurLimit=0 spark.executor.extraJavaOptions -Djdk.xml.maxOccurLimit=0 - 保存配置并重启集群,后续所有会话都会自动应用该参数
方案2:Notebook会话级临时配置
若不想修改集群全局配置,可在当前Notebook开头添加代码动态设置:
from pyspark.sql import SparkSession # 重新构建SparkSession并注入JVM参数 spark = SparkSession.builder \ .config("spark.driver.extraJavaOptions", "-Djdk.xml.maxOccurLimit=0") \ .config("spark.executor.extraJavaOptions", "-Djdk.xml.maxOccurLimit=0") \ .getOrCreate()
注意:需在执行XML读取代码前运行这段配置,若当前会话已启动,需重启Notebook使参数生效
方案3:验证配置是否生效
运行以下代码检查参数是否成功加载:
# 检查Driver端JVM参数 print("Driver参数:", spark.sparkContext.getConf().get("spark.driver.extraJavaOptions")) # 检查Executor端JVM参数 print("Executor参数:", spark.sparkContext.getConf().get("spark.executor.extraJavaOptions"))
备选方案(修改XSD)
如果业务规则允许,可直接修改XSD文件第5846行的maxOccurs属性,将超过5000的值改为5000或unbounded,此方法仅适用于XSD规则可调整的场景
内容的提问来源于stack exchange,提问作者newbee123
相关产品推荐
相关产品推荐

