Condividi tramite


FileStore

Importante

Questa documentazione è stata ritirata e potrebbe non essere aggiornata. Il prodotto, il servizio o la tecnologia citati in questo contenuto non sono più supportati.

FileStore è una cartella speciale all'interno di DBFS in cui è possibile salvare i file e renderli accessibili al Web browser. È possibile usare FileStore per:

  • Salvare file, ad esempio immagini e librerie, accessibili all'interno di HTML e JavaScript quando si richiama displayHTML.
  • Salvare i file di output da scaricare nel desktop locale.
  • Caricare volumi condivisi cluster e altri file di dati dal desktop locale per l'elaborazione in Databricks.

Quando si usano determinate funzionalità, Azure Databricks inserisce i file nelle cartelle seguenti in FileStore:

  • /FileStore/jars: contiene le librerie dell'area di lavoro legacy caricate. Se si eliminano i file in questa cartella, le librerie che fanno riferimento a questi file nell'area di lavoro potrebbero non funzionare più.
  • /FileStore/tables : contiene i file importati usando l'interfaccia utente. Se si eliminano i file in questa cartella, le tabelle create da questi file potrebbero non essere più accessibili.

Importante

Le librerie possono essere installate da DBFS quando si usa Databricks Runtime 14.3 LTS e versioni successive. Tuttavia, qualsiasi utente dell'area di lavoro può modificare i file di libreria archiviati in DBFS. Per migliorare la sicurezza delle librerie in un'area di lavoro di Azure Databricks, l'archiviazione dei file di libreria nella radice DBFS è deprecata e disabilitata per impostazione predefinita in Databricks Runtime 15.1 e versioni successive. Per impostazione predefinita, vedere Archiviazione di librerie nella radice DBFS deprecata e disabilitata.

Databricks consiglia invece di caricare tutte le librerie, incluse le librerie Python, i file JAR e i connettori Spark, nei file dell'area di lavoro o nei volumi di Unity Catalog o usando i repository dei pacchetti di libreria. Se il carico di lavoro non supporta questi modelli, è anche possibile usare le librerie archiviate nell'archiviazione di oggetti cloud.

Salvare un file in FileStore

È possibile usare dbutils.fs.put per scrivere file di testo arbitrari nella directory /FileStore in 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")

Sostituire <databricks-instance> con l'URL dell'area di lavoro della distribuzione di Azure Databricks come segue.

I file archiviati in /FileStore sono accessibili nel Web browser all'indirizzo https://<databricks-instance>/files/<path-to-file>?o=######. Ad esempio, il file archiviato in /FileStore/my-stuff/my-file.txt è accessibile in https://<databricks-instance>/files/my-stuff/my-file.txt?o=######, dove il numero dopo o= è uguale a quello dell'URL.

Nota

È anche possibile usare le interfacce di caricamento del file DBFS per inserire i file nella directory /FileStore. Vedere Esplorare e creare tabelle in DBFS.

Incorporare immagini statiche nei Notebook

È possibile usare la posizione files/ per incorporare immagini statiche nei Notebook:

displayHTML("<img src ='files/image.jpg'>")

o sintassi di importazione dell'immagine Markdown:

%md
![my_test_image](files/image.jpg)

È possibile caricare immagini statiche usando l'API DBFS e la libreria HTTP Python richieste. Nell'esempio seguente :

  • Sostituire <databricks-instance> con l'URL dell'area di lavoro della distribuzione di Azure Databricks.
  • Sostituire <token> con il token di accesso personale.
  • Sostituire <image-dir> con la posizione in FileStore cui si desidera caricare i file di immagine.

Nota

Come procedura consigliata per la sicurezza, quando si esegue l'autenticazione con strumenti automatizzati, sistemi, script e app, Databricks consiglia di usare token di accesso personali appartenenti alle entità servizio, anziché agli utenti dell'area di lavoro. Per creare token per le entità servizio, vedere Gestire i token per un'entità servizio.

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)

Ridimensionare le immagini statiche

Per ridimensionare un'immagine salvata in DBFS, copiare l'immagine in /FileStore e quindi ridimensionarla usando i parametri immagine in 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;">''')

Esempio di Notebook: usare una libreria JavaScript

Questo Notebook illustra come usare FileStore afficnhé contenga una libreria JavaScript.

Notebook di esempio di FileStore

Ottenere il notebook