Databricks 10.4 LTS中如何通过Python open()访问Workspace文件?
Databricks中用Python open()访问Workspace文件的问题解答
核心结论
不能直接用Python原生的open()方法访问Databricks Workspace下的文件。原因是Workspace的文件存储逻辑独立于集群节点的本地文件系统,open()只能读取集群本地节点的文件,或者通过/dbfs挂载点访问DBFS中的文件,但Workspace文件并不在这个直接可访问的范围内。
正确的处理方式
要读写Workspace中的文件,需要借助Databricks提供的dbutils.fs工具来中转,具体操作如下:
1. 读取Workspace文件
可以先将Workspace文件复制到集群本地临时目录,再用open()读取:
# 复制Workspace文件到本地临时目录 dbutils.fs.cp("dbfs:/Workspace/Users/<user-email>/my_result.json", "file:/tmp/my_result.json") # 用open()读取本地临时文件 with open("/tmp/my_result.json", "r") as f: content = f.read()
或者直接用dbutils.fs读取文件内容,无需复制:
content = dbutils.fs.head("dbfs:/Workspace/Users/<user-email>/my_result.json")
2. 写入Workspace文件
先将内容写入集群本地临时文件,再用dbutils.fs复制到Workspace路径:
# 写入本地临时文件 with open("/tmp/my_result.json", "w") as f: f.write('{"status": "success", "data": []}') # 复制到Workspace指定路径 dbutils.fs.cp("file:/tmp/my_result.json", "dbfs:/Workspace/Users/<user-email>/my_result.json")
为什么之前的路径尝试都失败
- 无前缀的
/Workspace/...:这是Workspace的逻辑路径,并非集群本地文件系统的真实路径,open()无法识别。 /dbfs/Workspace/...:虽然Workspace文件可以通过dbfs:/Workspace/的DBFS路径访问,但/dbfs是DBFS在集群节点的挂载点,直接用/dbfs/Workspace/...访问时,可能因权限或路径映射限制导致失败,且本质上open()仍无法直接处理Workspace的存储逻辑。/file/Workspace/...:/file前缀并非Databricks支持的文件路径格式,自然无法访问。
内容的提问来源于stack exchange,提问作者jdhao
相关产品推荐
相关产品推荐

