Partager via


Utiliser des fichiers sur Azure Databricks

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

  • Volumes de Catalogue Unity
  • 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 présente des exemples d’interaction avec des fichiers dans ces emplacements pour les outils suivants :

  • Apache Spark
  • Spark SQL et Databricks SQL
  • Utilitaires de système de fichiers Databricks (dbutils.fs ou %fs)
  • Interface CLI Databricks
  • Databricks REST API
  • 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 des fichiers Python OSS

Important

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

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é. Sur les systèmes de calcul configurés avec le mode d'accès à utilisateur unique et Databricks Runtime 14.3 et plus, Scala prend en charge FUSE pour les volumes du catalogue Unity et les fichiers d’espace de travail, excepté pour les sous-processus initiés par Scala, telles que la commande Scala "cat /Volumes/path/to/file".!!.

Spark et d’autres processus JVM peuvent uniquement accéder aux volumes de catalogue Unity ou aux fichiers d’espace de travail à l’aide des lecteurs et des enregistreurs qui prennent en charge le catalogue Unity. Par exemple, vous ne pouvez pas spécifier un fichier JAR comme dépendance dans une configuration Spark et vous ne pouvez pas utiliser des sources de données personnalisées PySpark. Si vous avez une charge de travail JVM à partir de bibliothèques qui doivent accéder à des fichiers dans des volumes ou dans des fichiers d’espace de travail, copiez les fichiers dans le stockage local de calcul à l’aide de commandes Python ou shell telles que %sh mv.. N’utilisez pas %fs ou dbutils.fs qui utilise la machine virtuelle JVM. Si un fichier doit être présent au démarrage du cluster, utilisez un script init pour déplacer le fichier en premier. Voir Que sont les scripts d’initialisation ?.

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’URI

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

    diagramme de chemins POSIX

Travailler avec des fichiers dans des volumes Unity Catalog

Databricks recommande d’utiliser des volumes de catalogue Unity pour configurer l’accès aux fichiers de données non tabulaires stockés dans le stockage d’objets cloud. Consultez Qu’est-ce que les volumes de catalogue Unity ?.

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 de 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/
Databricks REST API 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')

Note

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 :

  • Les écritures directes ou non séquentielles (aléatoires), telles que l’écriture de fichiers Zip et Excel, ne sont pas prises 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 les résultats dans les volumes catalogue Unity. 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 clairsemé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
    

Travailler avec des fichiers d'espace de travail

Les fichiers d’espace de travail Databricks sont des fichiers d’un espace de travail. Vous pouvez utiliser des fichiers d’espace de travail pour stocker et accéder à des fichiers tels que des notebooks, des fichiers de code source, des fichiers de données et d’autres ressources d’espace de travail. Étant donné que les fichiers d’espace de travail ont des restrictions de taille, Databricks recommande uniquement de stocker de petits fichiers de données ici 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 de 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
Databricks REST API 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')

Note

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

Pour connaître les limitations de l’utilisation des fichiers d’espace de travail, consultez Limitations.

Où vont les fichiers d’espace 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.

Consultez Supprimer un objet.

Utiliser des fichiers dans le stockage d’objets cloud

Databricks recommande d’utiliser des volumes de catalogue Unity pour configurer l’accès sécurisé aux fichiers dans le stockage d’objets cloud. Vous devez configurer des autorisations si vous choisissez d’accéder directement aux données dans le stockage d’objets cloud à l’aide d’URI. 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 de 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
Databricks REST API 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
Logiciel open source Python (OSS Python) Non pris en charge

Remarque

Travailler avec des fichiers dans des montages DBFS et une racine DBFS

Les montages DBFS ne sont pas sécurisables à l’aide du catalogue Unity 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 recommande de ne pas stocker de code ou de données sensibles ou de production dans la racine DBFS. Voir Qu’est-ce que DBFS ?.

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 de 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
Databricks REST API 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')
Projet OSS Python os.listdir('/dbfs/mnt/path/to/directory')

Note

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

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

Le stockage éphémère attaché au nœud du pilote est un stockage de bloc avec un accès au chemin d’accès intégré basé sur POSIX. 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 de système de fichiers Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Interface CLI Databricks Non pris en charge
Databricks REST API 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')
Logiciel open source Python os.listdir('/path/to/directory')

Note

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. Supposons que vous devez déplacer des données du système de fichiers du pilote vers des volumes de catalogue Unity. Dans ce cas, vous pouvez copier des fichiers à l’aide de 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>

Ressources additionnelles

Pour plus d’informations sur le chargement de fichiers locaux ou le téléchargement de fichiers Internet dans Azure Databricks, consultez Charger des fichiers dans Azure Databricks.