Interagire a livello di codice con i file dell'area di lavoro

È possibile interagire con i file dell'area di lavoro archiviati in Azure Databricks a livello di codice. In questo modo vengono abilitate attività come:

  • Archiviazione di piccoli file di dati insieme a notebook e codice.
  • Scrittura di file di log nelle directory sincronizzate con Git.
  • Importazione di moduli tramite percorsi relativi.
  • Creazione o modifica di un file di specifica dell'ambiente.
  • Scrittura dell'output dai notebook.
  • Scrittura dell'output dall'esecuzione di librerie come Tensorboard.

È possibile creare, modificare, rinominare ed eliminare file dell'area di lavoro a livello di codice in Databricks Runtime 11.3 LTS e versioni successive. Questa funzionalità è supportata per i notebook in Databricks Runtime 16.2 o superiori e per l'ambiente serverless 2 o superiore.

Nota

Per disabilitare la scrittura nei file dell'area di lavoro, impostare la variabile di ambiente del cluster WSFS_ENABLE_WRITE_SUPPORT=false. Per altre informazioni, vedere variabili di ambiente .

Nota

Nei Databricks Runtime 14.0 e versioni successive, la directory di lavoro predefinita corrente (CWD) per il codice eseguito localmente è la directory che contiene il notebook o lo script in esecuzione. Si tratta di una modifica del comportamento rispetto a Databricks Runtime 13.3 LTS e versioni precedenti. Fare riferimento a Qual è la directory di lavoro corrente predefinita?.

Negli ambienti serverless, la presenza di una directory di lavoro non è garantita, quindi usa percorsi assoluti per fare riferimento ai file. Si veda Limitazioni di calcolo serverless.

Leggere i percorsi dei file

Usare i comandi della shell per leggere i percorsi dei file, ad esempio in un repository o nel file system locale.

Per determinare il percorso dei file, immettere quanto segue:

%sh ls
  • I file non si trovano in un repository: Il comando restituisce il file system /databricks/driver.
  • File si trovano in un repository: Il comando restituisce un repository virtualizzato, ad esempio /Workspace/Repos/name@domain.com/public_repo_2/repos_file_system.

Leggere i file dell'area di lavoro dei dati

È possibile leggere a livello di codice file di dati di piccole dimensioni, come ad esempio i file .csv o .json, direttamente dal codice nei vostri notebook. L'esempio seguente utilizza Pandas per interrogare i file archiviati in una directory contrassegnata come /data, relativa alla radice del repository del progetto.

import pandas as pd
df = pd.read_csv("./data/winequality-red.csv")
df

È possibile usare Spark per leggere i file di dati. È necessario fornire a Spark il percorso completo.

  • I file dell'area di lavoro nelle cartelle Git usano il percorso file:/Workspace/Repos/<user-folder>/<repo-name>/path/to/file.
  • I file dell'area di lavoro nella directory personale utilizzano il percorso file:/Workspace/Users/<user-folder>/path/to/file.

È possibile copiare il percorso assoluto o relativo in un file dal menu a discesa accanto al file:

menu a discesa del file

L'esempio seguente illustra l'uso di {os.getcwd()} per ottenere il percorso completo.

import os
spark.read.format("csv").load(f"file:{os.getcwd()}/my_data.csv")

Nota

Nelle aree di lavoro in cui la radice e i mount DBFS sono disabilitati, è anche possibile usare dbfs:/Workspace per accedere ai file dell'area di lavoro utilizzando le utilità Databricks. Ciò richiede Databricks Runtime 13.3 LTS o versione successiva. Vedere Disabilitare l'accesso alla radice e ai montaggi DBFS nell'area di lavoro di Azure Databricks esistente.

Per altre informazioni sui file in Azure Databricks, vedere Usare file in Azure Databricks.

Creare, aggiornare ed eliminare file ed directory a livello di codice

È possibile modificare a livello di codice i file dell'area di lavoro in Azure Databricks, in modo analogo al modo in cui si lavora con i file in qualsiasi file system standard.

Nota

In Databricks Runtime 16.2 e versioni successive e nell'ambiente serverless 2 e versioni successive, tutte le interazioni a livello di codice con i file sono disponibili anche per i notebook. Per informazioni sulla conversione di un file in un notebook, vedere Convertire un file in un notebook.

Nota

La directory genitore di un file deve già esistere prima che tu scriva su di essa. Azure Databricks memorizza temporaneamente nel buffer le scritture dei file e le scarica nell'area di lavoro in modo asincrono, quindi la scrittura in un percorso la cui directory padre non esiste non riesce con AsyncFlushFailedException solo dopo la chiamata di scrittura, anziché nel momento in cui la si effettua. Crea prima la directory genitore, come mostrato nell'esempio seguente.

Gli esempi seguenti usano pacchetti e funzionalità Python standard per creare e modificare file e directory.

import os

# Create a new directory

os.mkdir('dir1')

# Create a new file and write to it

with open('dir1/new_file.txt', "w") as f:
    f.write("new content")

# Append to a file

with open('dir1/new_file.txt', "a") as f:
    f.write(" continued")

# Delete a file

os.remove('dir1/new_file.txt')

# Delete a directory

os.rmdir('dir1')
import shutil

# Copy a dashboard

shutil.copy("my-dashboard.lvdash.json", "my-dashboard-copy.lvdash.json")

# Move a query to a shared folder

shutil.move("test-query.dbquery","shared-queries/")


Risolvere nomi duplicati delle risorse

In alcuni casi, una cartella workspace potrebbe già contenere asset con lo stesso nome. Ad esempio, due query SQL potrebbero essere entrambe denominate My query. Questo può accadere quando gli asset sono stati creati prima che l'unicità del nome fosse pienamente applicata.

Quando una cartella contiene nomi duplicati di asset, l'accesso basato su file alla cartella fallisce, anche se gli asset stessi rimangono inalterati. É possibile visualizzare gli errori seguenti:

  • Name not unique on network (OSError: [Errno 76])—ad esempio, quando esegui ls o altri comandi nel terminale web, o elenchi la cartella da un notebook.
  • File name conflict oppure RESOURCE_CONFLICT: Duplicate entities detected in the directory—ad esempio, durante le operazioni di cartella Git.

Nota

I nomi duplicati non influenzano gli asset stessi. Puoi comunque aprire e usare ogni asset dal browser dello spazio di lavoro. Solo i comandi che raggiungono la cartella attraverso il file system — come il terminale web, WSFS o le operazioni di cartella Git — sono interessati.

Per trovare asset con nomi duplicati, esegui il seguente notebook. Scansiona una cartella e le sue sottocartelle e elenca asset che condividono lo stesso nome. Il notebook è di sola lettura e non rinomina né cancella alcun asset.

Trova asset duplicati dello spazio di lavoro

Ottieni il notebook

Per risolvere nomi duplicati usando l'interfaccia del workspace:

  1. Nel browser degli spazi di lavoro, apri ogni cartella identificata dal notebook.
  2. Rinomina o elimina le risorse duplicate finché ogni risorsa nella cartella non ha un nome univoco.

Dopo che tutti i nomi degli asset nella cartella sono unici, l'accesso basato su file funziona di nuovo.