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

Azure Databricks运行SparkFiles报路径不存在错误 社区版正常如何解决

问题原因

Azure Databricks与Databricks community的部署架构差异是报错的核心原因:

  • Databricks社区版为单节点部署,Driver和Executor进程运行在同一台服务器上,SparkFiles.addFile()下载的文件在本地路径全局可见,加file://前缀可以正常读取。
  • Azure Databricks为分布式集群部署,SparkFiles.addFile()只会将文件同步到所有Executor节点的本地临时目录,你使用file://前缀读取时,Spark默认会在当前执行任务的节点找文件,跨节点访问就会触发路径不存在错误。

可行解决方案

方案1:直接读取公共API(最简便)

Spark原生支持直接读取HTTP公开接口数据,不需要借助SparkFiles能力,修改代码如下即可直接运行:

cnae = 'https://servicodados.ibge.gov.br/api/v2/cnae/subclasses'
cnaeDF = spark.read.option("multiLine", True).option("mode", "PERMISSIVE").json(cnae)

方案2:保留SparkFiles的修改方式

如果业务逻辑必须使用SparkFiles能力,改为在Driver端读取本地文件后再转换为DataFrame,规避分布式节点本地路径不通的问题:

import json
from pyspark import SparkFiles

cnae = 'https://servicodados.ibge.gov.br/api/v2/cnae/subclasses'
spark.sparkContext.addFile(cnae)

# Driver端直接读取本地同步的文件
with open(SparkFiles.get("subclasses"), "r", encoding="utf-8") as f:
    cnae_data = json.load(f)

# 转换为Spark DataFrame
cnaeDF = spark.createDataFrame(cnae_data)

额外排查点

如果修改后仍有路径不存在报错,可以打印SparkFiles.get("subclasses")的返回值,确认当前环境下下载的文件名是否被自动重命名,部分环境会对无后缀的URL下载资源自动追加后缀,对应调整get方法的入参即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:04