如何从独立Azure Databricks工作区访问另一ADB的DBFS存储文件/表
跨Azure Databricks工作区访问DBFS文件的可行方案
Azure Databricks的DBFS(Databricks File System)是工作区私有隔离的,没有原生支持跨工作区直接访问其他工作区的DBFS存储。针对你的需求(从ADB-2读取ADB-1的/dbfs/FileStore/Zone1/File1.csv),可以通过以下几种方案实现:
1. 迁移文件到外部存储并跨工作区挂载
这是最常用的解决方案,步骤如下:
- 在ADB-1中迁移文件:将目标CSV文件从DBFS复制到Azure Blob Storage或ADLS Gen2等外部存储服务。示例命令:
# 替换为你的外部存储路径(以ADLS Gen2为例) dbutils.fs.cp("dbfs:/FileStore/Zone1/File1.csv", "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/ADB1_Files/File1.csv") - 在ADB-2中挂载外部存储:使用SAS密钥或服务主体(Service Principal)挂载上述外部存储路径,示例命令(SAS密钥方式):
dbutils.fs.mount( source="abfss://<容器名>@<存储账户名>.dfs.core.windows.net/ADB1_Files", mount_point="/mnt/adb1_shared_files", extra_configs={ "fs.azure.sas.<容器名>.<存储账户名>.dfs.core.windows.net": "<你的SAS令牌>" } ) - 在ADB-2中读取文件:挂载完成后即可像访问本地DBFS一样读取文件:
df = spark.read.csv("/mnt/adb1_shared_files/File1.csv", header=True)
2. 通过Unity Catalog跨工作区共享外部表
如果两个工作区属于同一个Azure租户且已配置Unity Catalog,可以通过共享外部表实现访问:
- 在ADB-1中准备:先将DBFS文件迁移到外部存储(同方案1的第一步),然后在Unity Catalog中创建指向该文件的外部表:
CREATE EXTERNAL TABLE adb1_files.file1_csv USING CSV LOCATION 'abfss://<容器名>@<存储账户名>.dfs.core.windows.net/ADB1_Files/File1.csv' OPTIONS (header 'true'); - 授权ADB-2访问:在Unity Catalog中给ADB-2对应的用户/组授予该表的
SELECT权限。 - 在ADB-2中查询:直接通过Unity Catalog的三名称空间(catalog.schema.table)查询:
SELECT * FROM adb1_catalog.adb1_files.file1_csv;
3. 通过Databricks REST API读取文件(适合小文件)
如果文件体积较小,可以通过ADB-1的REST API导出文件,再在ADB-2中调用API获取:
- 在ADB-1中生成访问凭据:创建一个具有DBFS读取权限的个人访问令牌(PAT)。
- 在ADB-2中调用API读取文件:使用HTTP请求调用ADB-1的DBFS读取接口,示例Python代码:
import requests adb1_workspace_url = "https://<adb1-workspace-url>.azuredatabricks.net" pat_token = "<adb1的PAT令牌>" file_path = "/FileStore/Zone1/File1.csv" headers = {"Authorization": f"Bearer {pat_token}"} response = requests.get(f"{adb1_workspace_url}/api/2.0/dbfs/read", headers=headers, params={"path": file_path, "offset": 0, "length": 1024*1024}) # 将响应内容写入ADB-2的DBFS,再读取为DataFrame dbutils.fs.put("/tmp/File1.csv", response.content, overwrite=True) df = spark.read.csv("/tmp/File1.csv", header=True)
注意:方案3仅适合小文件,大文件需要分块读取,效率较低,不推荐作为常规方案。
内容的提问来源于stack exchange,提问作者Rag
相关产品推荐
相关产品推荐

