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

如何从独立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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:20:34