共用方式為


使用 Azure Databricks 上的檔案

Azure Databricks 有多個公用程式和 API,可與下列位置中的檔案互動:

  • Unity Catalog 磁碟區
  • 工作區檔案
  • 雲端物件儲存體
  • DBFS 裝載和 DBFS 根目錄
  • 已連結至叢集驅動程式節點的暫時性儲存體

本文提供下列工具在這些位置中與檔案互動的範例:

  • Apache Spark
  • Spark SQL 和 Databricks SQL
  • Databricks 文件系統公用程式 (dbutils.fs%fs)
  • Databricks CLI
  • Databricks REST API
  • Bash 命令介面命令 (%sh)
  • 使用 %pip 安裝筆記本範圍的程式庫
  • pandas
  • OSS Python 檔案管理和處理公用程式

重要

需要 FUSE 資料存取的檔案作業無法使用 URI 直接存取雲端物件儲存體。 Databricks 建議使用 Unity 目錄磁碟區來設定 FUSE 這些位置的存取權。

Scala 支援在以 Unity 目錄和共用存取模式設定的計算上,針對 Unity 目錄磁碟區和工作區檔案使用 FUSE。 在以單一使用者存取模式和 Databricks Runtime 14.3 和更新版本設定的計算上,Scala 支援 UNITY 目錄磁碟區和工作區檔案的 FUSE,但源自 Scala 的子流程除外,例如 Scala 命令 "cat /Volumes/path/to/file".!!

我需要提供 URI 結構描述來存取資料嗎?

Azure Databricks 中的資料存取路徑遵循下列其中一個標準:

  • URI 樣式路徑包含 URI 結構描述。 針對 Databricks 原生資料存取解決方案,在大部分使用案例中,URI 結構描述都是選用的。 直接存取雲端物件儲存體中的資料時,您必須為儲存體類型提供正確的 URI 結構描述。

    URI 路徑圖表

  • POSIX 樣式路徑會提供相對於驅動程式根目錄的資料存取權 (/)。 POSIX 樣式的路徑永遠不需要結構描述。 您可以使用 Unity 目錄磁碟區或 DBFS 裝載,提供雲端物件儲存體中資料的 POSIX 樣式存取。 許多 ML 架構和其他 OSS Python 模組都需要 FUSE,而且只能使用 POSIX 樣式的路徑。

    POSIX 路徑圖表

處理 Unity Catalog 磁碟區中的檔案

Databricks 建議使用 Unity Catalog 磁碟區來設定對儲存於雲端物件儲存體中非表格式資料檔案的存取。 請參閱Unity Catalog 磁碟區是什麼?

工具 範例
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL 和 Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Databricks 檔案系統公用程式 dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Databricks CLI databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
Databricks REST API POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Bash 命令介面命令 %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
程式庫安裝 %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandas df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
OSS Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

注意

使用 Databricks CLI 時需要 dbfs:/ 結構描述。

磁碟區限制

磁碟區具有下列限制:

  • 不支援直接附加或非循序 (隨機) 寫入,例如寫入 Zip 和 Excel 檔案。 針對直接附加或隨機寫入工作負載,請先在本機磁碟上執行作業,然後將結果複製到 Unity 目錄磁碟區。 例如:

    # python
    import xlsxwriter
    from shutil import copyfile
    
    workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
    worksheet = workbook.add_worksheet()
    worksheet.write(0, 0, "Key")
    worksheet.write(0, 1, "Value")
    workbook.close()
    
    copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx')
    
  • 不支援疏鬆檔案。 若要複製疏鬆檔案,請使用 cp --sparse=never

    $ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    error writing '/dbfs/sparse.file': Operation not supported
    $ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    

使用工作區檔案

Databricks 工作區檔案是工作區中並非筆記本的檔案。 您可以使用工作區檔案來儲存和存取與筆記本和其他工作區資產一起儲存的資料和其他檔案。 因為工作區檔案有大小限制,Databricks 建議只在這裡儲存小型資料檔案,主要是用於開發和測試。

工具 範例
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL 和 Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Databricks 檔案系統公用程式 dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Databricks CLI databricks workspace list
Databricks REST API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Bash 命令介面命令 %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
程式庫安裝 %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandas df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
OSS Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

注意

使用 Databricks Utilities、Apache Spark 或 SQL 時,需要 file:/ 結構描述。

如需使用工作區檔案的限制,請參閱 限制

刪除的工作區檔案會移至何處?

刪除工作區檔案會將其傳送至垃圾桶。 您可以使用 UI 從垃圾桶復原或永久刪除檔案。

請參閱刪除物件

處理雲端物件儲存體中的檔案

Databricks 建議使用 Unity 目錄磁碟區來設定對雲端物件儲存體中檔案的安全存取。 如果您選擇使用 URI 直接存取雲端物件儲存體中的資料,則必須設定權限。 請參閱管理外部位置、外部資料表和外部磁碟區

下列範例使用 URI 來存取雲端物件儲存體中的資料:

工具 範例
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL 和 Databricks SQL SELECT * FROM csv.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json`; LIST 'abfss://container-name@storage-account-name.dfs.core.windows.net/path';
Databricks 檔案系統公用程式 dbutils.fs.ls("abfss://container-name@storage-account-name.dfs.core.windows.net/path/") %fs ls abfss://container-name@storage-account-name.dfs.core.windows.net/path/
Databricks CLI 不支援
Databricks REST API 不支援
Bash 命令介面命令 不支援
程式庫安裝 %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandas 不支援
OSS Python 不支援

注意

使用 DBFS 裝載和 DBFS 根目錄中的檔案

DBFS 裝載不是使用 Unity 目錄的安全性實體,而且 Databricks 已不再建議使用。 儲存在 DBFS 根目錄中的資料可供工作區中的所有使用者存取。 Databricks 建議將任何敏感性或生產程式碼或資料儲存在 DBFS 根目錄中。 請參閱什麼是 DBFS?

工具 範例
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL 和 Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Databricks 檔案系統公用程式 dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Databricks CLI databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
Databricks REST API POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Bash 命令介面命令 %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
程式庫安裝 %pip install /dbfs/mnt/path/to/my_library.whl
Pandas df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
OSS Python os.listdir('/dbfs/mnt/path/to/directory')

注意

使用 Databricks CLI 時需要 dbfs:/ 結構描述。

使用附加至驅動程式節點的暫時性儲存體中的檔案

連結至驅動程式節點之暫時性儲存體是具有內建 POSIX 型路徑存取的區塊儲存體。 當叢集終止或重新啟動時,儲存在此位置的任何資料都會消失。

工具 範例
Apache Spark 不支援
Spark SQL 和 Databricks SQL 不支援
Databricks 檔案系統公用程式 dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks CLI 不支援
Databricks REST API 不支援
Bash 命令介面命令 %sh curl http://<address>/text.zip > /tmp/text.zip
程式庫安裝 不支援
Pandas df = pd.read_csv('/path/to/data.csv')
OSS Python os.listdir('/path/to/directory')

注意

使用 Databricks Utilities 時需要 file:/ 結構描述。

將資料從暫時性儲存體移至磁碟區

您可能想要使用 Apache Spark 存取下載或儲存至暫時性儲存體的資料。 因為暫時性儲存體會連結至驅動程式,而 Spark 是分散式處理引擎,並非所有作業都可以直接存取此處的資料。 假設您必須將資料從驅動程式檔案系統移至 Unity 目錄磁碟區。 在此情況下,您可以使用 magic 命令Databricks 公用程式來複製檔案,如下列範例所示:

dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>

其他資源

如需上傳本機檔案或將網際網路檔案下載至 Azure Databricks 的資訊,請參閱將檔案上傳至 Azure Databricks