FileStore
FileStore は、ファイルを保存して Web ブラウザーからそれらにアクセスできる、Databricks ファイル システム (DBFS) 内の特別なフォルダーです。 FileStore を使用して、次のことを実行できます。
displayHTML
を呼び出す際に HTML および JavaScript 内でアクセスできるファイル (イメージやライブラリなど) を保存します。- ローカル デスクトップにダウンロードする出力ファイルを保存します。
- Databricks で処理するために、ローカル デスクトップから CSV などのデータ ファイルをアップロードします。
特定の機能を使用する場合、Azure Databricks では FileStore の下の次のフォルダーにファイルが保存されます。
/FileStore/jars
- アップロードするライブラリが含まれます。 このフォルダー内のファイルを削除すると、ワークスペース内のこれらのファイルを参照するライブラリが機能しなくなる可能性があります。/FileStore/tables
- UI を使用してインポートするファイルが含まれます。 このフォルダー内のファイルを削除すると、これらのファイルから作成したテーブルにアクセスできなくなる可能性があります。
FileStore にファイルを保存する
dbutils.fs.put
を使用して、DBFS 内の /FileStore
ディレクトリに任意のテキスト ファイルを書き込むことができます。
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
に格納されているファイルは、 Web ブラウザーで 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 と同じです。
Note
また、DBFS ファイル アップロード インターフェイスを使用して、ファイルを /FileStore
ディレクトリに保存することもできます。 DBFS でのテーブルの探索と作成に関するページを参照してください。
ノートブックに静的イメージを埋め込む
files/
の場所を使用して、ノートブックに静的イメージを埋め込むことができます。
displayHTML("<img src ='files/image.jpg'>")
または Markdown のイメージ インポート構文は次のようになります。
%md

静的イメージは、DBFS Databricks REST API リファレンスおよび Requests Python HTTP ライブラリを使用してアップロードできます。 次の例では
<databricks-instance>
を Azure Databricks デプロイのワークスペース URL に置き換えます。<token>
を個人用アクセス トークンの値に置き換えます。<image-dir>
を、イメージ ファイルをアップロードするFileStore
内の場所に置き換えます。
Note
セキュリティのベスト プラクティスとしては、自動化ツール、システム、スクリプト、アプリを使用して認証する場合、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 ライブラリを含める方法を示しています。