FileStore
FileStore 是 DBFS 內的特殊資料夾,您可以在其中儲存盤案,並讓網頁瀏覽器存取檔案。 您可以使用 FileStore 來:
- 當您呼叫
displayHTML
時,儲存檔案,例如影像和連結庫,可在 HTML 和 JavaScript 中存取。 - 儲存您要下載到本機桌面的輸出檔案。
- 從本機桌面上傳 CSV 和其他數據檔,以處理 Databricks。
當您使用特定功能時,Azure Databricks 會將檔案放在 FileStore 底下的下列資料夾中:
/FileStore/jars
- 包含上傳的舊版工作區連結庫。 如果您刪除此資料夾中的檔案,在工作區中參考這些檔案的連結庫可能無法再運作。/FileStore/tables
- 包含您使用 UI 匯入的檔案。 如果您刪除此資料夾中的檔案,您從這些檔案建立的數據表可能無法再存取。
重要
使用 Databricks Runtime 14.3 LTS 和以下版本時,可以從 DBFS 安裝連結庫。 不過,任何工作區使用者都可以修改儲存在 DBFS 中的連結庫檔案。 若要改善 Azure Databricks 工作區中連結庫的安全性,在 Databricks Runtime 15.0 和更新版本中預設會淘汰和停用 DBFS 根目錄中的連結庫檔案。 請參閱 在 DBFS 根目錄中儲存連結庫已被取代,並預設為停用。
相反地,Databricks 建議 將連結庫上傳至工作區檔案或 Unity 目錄磁碟區,或使用連結庫套件存放庫。 如果您的工作負載不支援這些模式,您也可以使用儲存在雲端物件記憶體中的連結庫。
將檔案儲存至 FileStore
您可以使用 dbutils.fs.put
將任意文字檔 /FileStore
寫入 DBFS 中的目錄:
dbutils.fs.put("/FileStore/my-stuff/my-file.txt", "This is the actual text that will be saved to disk. Like a 'Hello world!' example")
在下列專案中,將 取代 <databricks-instance>
為 Azure Databricks 部署的工作區 URL 。
儲存在 中的 /FileStore
檔案可在網頁瀏覽器中 https://<databricks-instance>/files/<path-to-file>?o=######
存取。 例如,您儲存在 /FileStore/my-stuff/my-file.txt
中的檔案可存取 , https://<databricks-instance>/files/my-stuff/my-file.txt?o=######
其中的數位 o=
與URL中的數位相同。
注意
您也可以使用 DBFS 檔案上傳介面,將檔案 /FileStore
放入目錄中。 請參閱 在 DBFS 中探索和建立數據表。
在筆記本中內嵌靜態影像
您可以使用位置將 files/
靜態影像內嵌至筆記本:
displayHTML("<img src ='files/image.jpg'>")
或 Markdown 影像匯入語法:
%md
![my_test_image](files/image.jpg)
您可以使用 DBFS API 和要求 Python HTTP 連結庫來上傳靜態影像。 在以下範例中:
- 將 取代
<databricks-instance>
為 Azure Databricks 部署的工作區 URL 。 - 將取代
<token>
為您個人存取令牌的值。 - 將取代
<image-dir>
為您要上傳圖像檔的位置FileStore
。
注意
作為安全性最佳做法,當您使用自動化工具、系統、腳本和應用程式進行驗證時,Databricks 建議您使用屬於 服務主體 的個人存取令牌,而不是工作區使用者。 若要建立服務主體的令牌,請參閱 管理服務主體的令牌。
import requests
import json
import os
TOKEN = '<token>'
headers = {'Authorization': 'Bearer %s' % TOKEN}
url = "https://<databricks-instance>/api/2.0"
dbfs_dir = "dbfs:/FileStore/<image-dir>/"
def perform_query(path, headers, data={}):
session = requests.Session()
resp = session.request('POST', url + path, data=json.dumps(data), verify=True, headers=headers)
return resp.json()
def mkdirs(path, headers):
_data = {}
_data['path'] = path
return perform_query('/dbfs/mkdirs', headers=headers, data=_data)
def create(path, overwrite, headers):
_data = {}
_data['path'] = path
_data['overwrite'] = overwrite
return perform_query('/dbfs/create', headers=headers, data=_data)
def add_block(handle, data, headers):
_data = {}
_data['handle'] = handle
_data['data'] = data
return perform_query('/dbfs/add-block', headers=headers, data=_data)
def close(handle, headers):
_data = {}
_data['handle'] = handle
return perform_query('/dbfs/close', headers=headers, data=_data)
def put_file(src_path, dbfs_path, overwrite, headers):
handle = create(dbfs_path, overwrite, headers=headers)['handle']
print("Putting file: " + dbfs_path)
with open(src_path, 'rb') as local_file:
while True:
contents = local_file.read(2**20)
if len(contents) == 0:
break
add_block(handle, b64encode(contents).decode(), headers=headers)
close(handle, headers=headers)
mkdirs(path=dbfs_dir, headers=headers)
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
if ".png" in f:
target_path = dbfs_dir + f
resp = put_file(src_path=f, dbfs_path=target_path, overwrite=True, headers=headers)
if resp == None:
print("Success")
else:
print(resp)
調整靜態影像
若要調整您已儲存至 DBFS 的映像大小,請將映射 /FileStore
複製到 ,然後使用 中的 displayHTML
影像參數重設大小:
dbutils.fs.cp('dbfs:/user/experimental/MyImage-1.png','dbfs:/FileStore/images/')
displayHTML('''<img src="files/images/MyImage-1.png" style="width:600px;height:600px;">''')
筆記本範例:使用 JavaScript 連結庫
此筆記本示範如何使用 FileStore 來包含 JavaScript 連結庫。