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

DBFS与Volumes文件访问:Python与Spark读写问题解析

Databricks DBFS文件读取问题解答

问题场景

尝试通过Databricks文件系统(DBFS)读取日志文件时,使用Python标准open函数遇到路径相关困惑,最终通过Spark API成功读取文件内容。

初始失败代码

file_path = "\/dbfs/cluster-logs/use_case/default_job_cluster/cluster_id/init_scripts/cluster_id/20240801_proxy-init.sh.stderr.log"

with open(file_path, 'r') as file:
    contents = file.read()
    print(contents)

终端显示的错误信息

bash: line 11: /Volumes/landing/default/artifacts/projects/use_case/databricks/scripts/proxy-init.sh: No such file or directory

成功读取的代码

file_path = "\/dbfs/cluster-logs/use_case/default_job_cluster/cluster_id/init_scripts/cluster_id/20240801_proxy-init.sh.stderr.log"

from pyspark.sql import functions as F
from pyspark.sql.functions import collect_list

if dbutils.fs.ls(file_path):
    file_df_to_check = spark.read.text(file_path).agg(collect_list("value").alias("all_lines"))
    display(file_df_to_check)

问题解答

1. 为何第一段代码会出现指向Volume路径的错误?

这个错误并非open函数读取DBFS文件时抛出的,而是你要读取的日志文件本身的内容。该日志是集群初始化脚本的标准错误输出,记录的是初始化过程中脚本尝试访问/Volumes/.../proxy-init.sh文件时找不到目标的问题。你用open函数时可能因路径解析问题没成功读取到日志内容,但终端显示的错误其实是日志文件里的原有报错,和你的读取操作无关。

2. 文档中提到DBFS提供“volumes的访问协议”是什么含义?为何第一段代码无法正常工作?

DBFS的“volumes访问协议”指的是:DBFS提供了统一的路径范式,让你可以用/dbfs/Volumes/...或dbfs:/Volumes/...这样的路径直接访问Databricks Volumes(卷存储),无需关心Volumes底层对接的是云存储还是其他存储介质,实现了存储访问的统一抽象。

第一段代码无法工作的核心原因:

  • Python标准open函数只能访问集群节点的本地文件系统,/dbfs/是DBFS在Driver节点本地的挂载点,但这个挂载仅局限于Driver节点,且如果文件存储在DBFS中挂载点未覆盖的区域,open就无法找到文件。
  • 你路径中的转义符\/属于多余操作,正确的DBFS路径应直接写/dbfs/...或dbfs:/...,转义符会导致路径解析异常,进一步让open无法定位到正确的挂载路径。

3. 为何只能通过Spark读取该文件,而无法使用标准Python open函数?

  • Spark API(如spark.read.text)是直接对接DBFS的底层存储服务接口,不管文件存放在DBFS的哪个区域(包括Volumes、未挂载到本地的存储区域等)都能正常访问,且天生支持分布式存储的文件读取。
  • Python的open函数依赖DBFS在节点本地的挂载映射,仅能访问挂载范围内的文件,且如果在Worker节点执行(比如通过UDF调用),会因Worker节点没有DBFS挂载而直接失败。Spark则不依赖本地挂载,通过Databricks的存储服务直接访问DBFS,因此能稳定读取目标文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:58:12