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

Spark配置recursiveFileLookup后无法递归加载子目录XML文件求助

解决Spark递归加载XML文件找不到的问题

你遇到的问题源于Spark的XML数据源(databricks/spark-xml)对部分通用数据源选项的支持逻辑,和parquet、txt这类原生格式不一致,以下是几种可行的解决办法:

方案1:升级spark-xml库到最新版本

旧版本的spark-xml可能未适配recursiveFileLookup和pathGlobFilter这类通用选项,建议升级至0.15.0及以上版本(对应Spark 3.x)。升级后你的原有代码大概率可以正常运行。

方案2:手动递归获取XML文件路径后加载

如果无法升级库,可通过Spark的文件API先获取所有子目录下的XML文件路径,再传给XML数据源加载:

# 递归获取所有XML文件的路径
xml_file_paths = spark.sparkContext.wholeTextFiles("path/to/dir/**/*.xml").keys()

# 将路径转为列表
file_paths = [row[0] for row in xml_file_paths.collect()]

# 加载XML文件
df = (
    spark.read
    .format("xml")
    .option("rowTag", "library")
    .option("wholetext", "true")
    .load(file_paths)
)

方案3:直接使用通配符路径

也可以直接在load路径中使用**通配符匹配所有子目录,替代recursiveFileLookup选项:

df = (
    spark.read
    .format("xml")
    .option("rowTag", "library")
    .option("wholetext", "true")
    .load("path/to/dir/**/*.xml")
)

额外检查点

  • 确认目标目录下确实存在.xml后缀的文件,注意文件名大小写(部分系统如Linux区分大小写)
  • 确保Spark进程对所有子目录和文件有读取权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:12:48