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
相关产品推荐
相关产品推荐

