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

Spark ignoreMissingFiles配置在ADLS读取JSON时失效问题

解决Spark 3.3.x(DBR12.2)读取ADLS文件时的FileNotFoundException问题

1. 确认并正确配置Spark参数

Spark 3.3.x对文件读取的校验逻辑比3.2.x更严格,仅设置spark.sql.files.ignoreMissingFiles=true可能不足以覆盖所有场景,需要补充以下配置:

  • 启用损坏文件忽略:spark.sql.files.ignoreCorruptFiles=true,与缺失文件配置配合,避免文件状态异常触发报错
  • 禁用ADLS文件缓存(针对ADLS Gen2):spark.databricks.adls.cache.enabled=false,防止读取到过时的文件列表
  • 建议用会话级配置方式确保生效,替代spark.sql("SET ..."):
    spark.conf.set("spark.sql.files.ignoreMissingFiles", "true")
    spark.conf.set("spark.sql.files.ignoreCorruptFiles", "true")
    spark.conf.set("spark.databricks.adls.cache.enabled", "false")
    

2. 主动获取存在的文件列表再读取

绕过Spark自动枚举文件的逻辑,先筛选出当前目录下真实存在的JSON文件,再读取这些文件,从根源避免访问已被移动的文件:

# 遍历目标目录,收集可访问的JSON文件路径
valid_file_paths = []
for item in dbutils.fs.ls(adlspath_input):
    if item.isFile and item.path.endswith(".json"):
        # 额外校验文件可访问性(可选,进一步降低异常概率)
        try:
            dbutils.fs.head(item.path, 1)
            valid_file_paths.append(item.path)
        except Exception:
            pass

# 仅读取确认存在的文件
df = spark.read.format("json").schema(jsonSchema).load(valid_file_paths)

3. 调整文件扫描并行度(可选)

如果上述方案仍有问题,可尝试降低文件扫描的并行度,减少单任务处理的文件数量,缓解并发读取时的文件状态不一致问题:

spark.conf.set("spark.sql.fileScan.parallelism", "100")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:06