Utilisation de fichiers sur Azure Databricks

Azure Databricks fournit plusieurs utilitaires et API pour interagir avec les fichiers dans les emplacements suivants :

  • Volumes Unity Catalog
  • Fichiers d’espace de travail
  • Stockage d’objets cloud
  • Montages DBFS et racine DBFS
  • Stockage éphémère attaché au nœud de pilote du cluster

Cet article fournit des exemples d’interaction avec des fichiers dans ces emplacements pour les outils suivants :

  • Apache Spark
  • Spark SQL et Databricks SQL
  • Utilitaires du système de fichiers Databricks (dbutils.fs ou %fs)
  • Interface CLI Databricks
  • API REST Databricks
  • Commandes de l’interpréteur de commandes Bash (%sh)
  • Installations de bibliothèque dans l’étendue du notebook en utilisant %pip
  • Pandas
  • Utilitaires de gestion et de traitement de fichiers Python OSS

Important

Les opérations de fichier qui nécessitent un accès FUSE aux données ne peuvent pas accéder directement au stockage d’objets cloud à l’aide d’URI. Databricks recommande d’utiliser des volumes Unity Catalog pour configurer l’accès à ces emplacements pour FUSE.

Scala ne prend pas en charge FUSE pour les volumes Unity Catalog ou les fichiers d’espace de travail sur le calcul configuré avec le mode d’accès utilisateur unique ou les clusters sans Unity Catalog. Scala prend en charge FUSE pour les volumes Unity Catalog et les fichiers d’espace de travail sur le calcul configurés avec Unity Catalog et le mode d’accès partagé.

Dois-je fournir un schéma d’URI pour accéder aux données ?

Les chemins d’accès aux données dans Azure Databricks suivent l’une des normes suivantes :

  • Les chemins d’accès de style URI incluent un schéma d’URI. Pour les solutions d’accès aux données natives Databricks, les schémas d’URI sont facultatifs pour la plupart des cas d’usage. Lorsque vous accédez directement aux données dans le stockage d’objets cloud, vous devez fournir le schéma d’URI approprié pour le type de stockage.

    Diagramme de chemins d’accès d’URI

  • Les chemins d’accès de style POSIX fournissent un accès aux données par rapport à la racine du pilote (/). Les chemins d’accès de style POSIX ne nécessitent jamais de schéma. Vous pouvez utiliser des volumes Unity Catalog ou des montages DBFS pour fournir un accès de style POSIX aux données dans le stockage d’objets cloud. De nombreuses infrastructures ML et d’autres modules Python OSS nécessitent FUSE et peuvent utiliser uniquement des chemins d’accès de style POSIX.

    Diagramme de chemins d’accès POSIX

Utiliser des fichiers dans des volumes Unity Catalog

Databricks recommande d’utiliser des volumes Unity Catalog pour configurer l’accès aux fichiers de données non tabulaires stockés dans le stockage d’objets cloud. Consultez Créer et utiliser des volumes.

Outil Exemple
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL et Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Utilitaires du système de fichiers Databricks dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Interface CLI Databricks databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
API REST Databricks POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Commandes de l’interpréteur de commandes Bash %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Installations de bibliothèque %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')
Python OSS os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Remarque

Le schéma dbfs:/ est requis lors de l’utilisation de l’interface CLI Databricks.

Limitations des volumes

Les volumes présentent les limitations suivantes :

  • Aucune écriture non séquentielle (aléatoire) ou d’ajout direct, telle que l’écriture de fichiers Zip et Excel n’est prise en charge. Pour les charges de travail d’ajout direct ou d’écriture aléatoire, effectuez d’abord les opérations sur un disque local, puis copiez le résultat sur des volumes Unity Catalog. Par exemple :

    # 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')
    
  • Les fichiers partiellement alloués ne sont pas pris en charge. Pour copier des fichiers partiellement alloués, utilisez 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
    

Utilisation des fichiers d’espace de travail

Les fichiers d’espace de travail Databricks sont l’ensemble des fichiers d’un espace de travail qui ne sont pas des notebooks. Vous pouvez utiliser des fichiers d’espace de travail pour stocker et accéder aux données et à d’autres fichiers enregistrés en même temps que les notebooks et d’autres ressources de l’espace de travail. Étant donné que les fichiers d’espace de travail ont des restrictions de taille, Databricks recommande d’y stocker uniquement de petits fichiers de données principalement pour le développement et le test.

Outil Exemple
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL et Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Utilitaires du système de fichiers Databricks dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Interface CLI Databricks databricks workspace list
API REST Databricks POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Commandes de l’interpréteur de commandes Bash %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Installations de bibliothèque %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandas df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
Python OSS os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Remarque

Le schéma file:/ est requis lors de l’utilisation des utilitaires Databricks, d’Apache Spark ou de SQL.

Limites de fichiers d’espaces de travail

Les fichiers d’espaces de travail présentent les limites suivantes :

  • La taille du fichier de l’espace de travail est limitée à 500 Mo à partir de l’interface utilisateur. La taille maximale des fichiers autorisée lors de l’écriture à partir d’un cluster est de 256 Mo.

  • Si votre workflow utilise du code source situé dans un dépôt Git distant, vous ne pouvez pas écrire dans le répertoire actif ou écrire à l’aide d’un chemin relatif. Options d’écriture dans d’autres options d’emplacement.

  • Vous ne pouvez pas utiliser de commandes git lorsque vous enregistrez dans des fichiers de l’espace de travail. La création de répertoires .git n'est pas autorisée dans les fichiers de l'espace de travail.

  • Il existe une prise en charge limitée des opérations de fichiers d’espaces de travail à partir du calcul serverless.

  • Les exécuteurs ne peuvent pas écrire dans les fichiers de l'espace de travail.

  • Les liens symboliques ne sont pas pris en charge.

  • Les fichiers d’espaces de travail ne sont pas accessibles à partir de fonctions définies par l’utilisateur (UDF) sur des clusters avec un mode d’accès partagé.

Où vont les fichiers d’espaces de travail supprimés ?

La suppression d'un fichier d'espace de travail l'envoie à la corbeille. Vous pouvez récupérer ou supprimer définitivement des fichiers de la corbeille à l'aide de l'interface utilisateur.

Voir Supprimer un objet.

Utilisation de fichiers dans le stockage d’objets cloud

Databricks recommande d’utiliser des volumes Unity Catalog pour configurer l’accès sécurisé aux fichiers dans le stockage d’objets cloud. Si vous choisissez d’accéder directement aux données dans le stockage d’objets cloud à l’aide d’URI, vous devez configurer des autorisations. Voir Gérer les emplacements externes, les tables externes et les volumes externes.

Les exemples suivants utilisent des URI pour accéder aux données dans le stockage d’objets cloud :

Outil Exemple
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL et 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';
Utilitaires du système de fichiers 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/
Interface CLI Databricks Non pris en charge
API REST Databricks Non pris en charge
Commandes de l’interpréteur de commandes Bash Non pris en charge
Installations de bibliothèque %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandas Non pris en charge
Python OSS Non pris en charge

Remarque

Le stockage d’objets cloud ne prend pas en charge le passage des informations d’identification.

Utilisation de fichiers dans des montages DBFS et une racine DBFS

Les montages DBFS ne sont pas sécurisables à l’aide d’Unity Catalog et ne sont plus recommandés par Databricks. Les données stockées dans la racine DBFS sont accessibles par tous les utilisateurs de l’espace de travail. Databricks déconseille le stockage de code ou de données sensibles ou de production dans la racine DBFS. Consultez Qu’est-ce que DBFS (Databricks File System) ?.

Outil Exemple
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL et Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Utilitaires du système de fichiers Databricks dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Interface CLI Databricks databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
API REST Databricks POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Commandes de l’interpréteur de commandes Bash %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Installations de bibliothèque %pip install /dbfs/mnt/path/to/my_library.whl
Pandas df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
Python OSS os.listdir('/dbfs/mnt/path/to/directory')

Remarque

Le schéma dbfs:/ est requis lors de l’utilisation de l’interface CLI Databricks.

Utilisation de fichiers dans le stockage éphémère attaché au nœud de pilote

Le stockage éphémère attaché au nœud de lecteur est le stockage de blocs avec un accès au chemin d’accès avec POSIX natif. Toutes les données stockées dans cet emplacement disparaissent lorsqu’un cluster se termine ou redémarre.

Outil Exemple
Apache Spark Non pris en charge
Spark SQL et Databricks SQL Non pris en charge
Utilitaires du système de fichiers Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Interface CLI Databricks Non pris en charge
API REST Databricks Non pris en charge
Commandes de l’interpréteur de commandes Bash %sh curl http://<address>/text.zip > /tmp/text.zip
Installations de bibliothèque Non pris en charge
Pandas df = pd.read_csv('/path/to/data.csv')
Python OSS os.listdir('/path/to/directory')

Remarque

Le schéma file:/ est requis lors de l’utilisation des utilitaires Databricks.

Déplacer des données d’un stockage éphémère vers des volumes

Vous pouvez accéder aux données téléchargées ou enregistrées dans un stockage éphémère à l’aide d’Apache Spark. Étant donné que le stockage éphémère est attaché au pilote et que Spark est un moteur de traitement distribué, toutes les opérations ne peuvent pas accéder directement aux données ici. Si vous avez besoin de déplacer des données du système de fichiers du pilote vers des volumes Unity Catalog, vous pouvez copier des fichiers en utilisant des commandes magiques ou des utilitaires Databricks, comme dans les exemples suivants :

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>