Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
notebookutils.fs fournit des utilitaires pour travailler avec différents systèmes de fichiers, notamment Azure Data Lake Storage (ADLS) Gen2 et Stockage Blob Azure. Veillez à configurer l’accès à Azure Data Lake Storage Gen2 et Stockage Blob Azure de manière appropriée.
Exécutez les commandes suivantes pour obtenir une vue d’ensemble des méthodes disponibles :
notebookutils.fs.help()
Le tableau suivant répertorie les méthodes de système de fichiers disponibles :
| Méthode | Signature | Description |
|---|---|---|
ls |
ls(path: String): Array |
Lister le contenu d’un répertoire. |
mkdirs |
mkdirs(path: String): Boolean |
Crée le répertoire donné s’il n’existe pas, et crée également les répertoires parents nécessaires. |
cp |
cp(src: String, dest: String, recurse: Boolean = false): Boolean |
Copie un fichier ou un répertoire, éventuellement entre les systèmes de fichiers. |
fastcp |
fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean |
Copie un fichier ou un répertoire via azcopy pour obtenir de meilleures performances avec de grands volumes de données. |
mv |
mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean |
Déplace un fichier ou un répertoire, éventuellement entre les systèmes de fichiers. |
put |
put(file: String, content: String, overwrite: Boolean = false): Boolean |
Écrit la chaîne donnée dans un fichier encodé au format UTF-8. |
head |
head(file: String, max_bytes: int = 1024 * 100): String |
Retourne jusqu’aux premiers max_bytes octets du fichier donné sous la forme d’une chaîne encodée en UTF-8. |
append |
append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean |
Ajoute le contenu à un fichier. |
rm |
rm(path: String, recurse: Boolean = false): Boolean |
Supprime un fichier ou un répertoire. |
exists |
exists(path: String): Boolean |
Vérifie si un fichier ou un répertoire existe. |
getProperties |
getProperties(path: String): Map |
Obtient les propriétés du chemin d’accès donné. Disponible uniquement dans les notebooks Python (non pris en charge dans PySpark, Scala ou R). |
Note
Toutes les méthodes de système de fichiers sont disponibles dans les notebooks Python, PySpark, Scala et R, sauf indication contraire. Scala utilise des noms de paramètres camelCase (par exemple, createPath au lieu de create_path, maxBytes au lieu de max_bytes).
Pour les opérations de montage et de démontage, consultez montage et démontage de fichier.
Note
Gardez à l’esprit les contraintes et considérations suivantes lorsque vous travaillez avec notebookutils.fs:
-
Le comportement du chemin varie selon le type de bloc-notes : dans les blocs-notes Spark, les chemins relatifs sont résolus vers le chemin ABFSS Lakehouse par défaut. Dans les notebooks Python, les chemins relatifs sont résolus vers le répertoire de travail du système de fichiers local (
/home/trusted-service-user/work). -
Limitations d’écriture simultanées :
notebookutils.fs.append()etnotebookutils.fs.put()ne prennent pas en charge les écritures simultanées dans le même fichier en raison d’un manque de garanties d’atomicité. -
Ajouter un délai dans la boucle : lors de l'utilisation de
notebookutils.fs.append()dans les boucles, ajoutez une pause de 0,5 à 1 seconde entre les écritures pour assurer l'intégrité des données. -
Limitations des raccourcis OneLake : pour les raccourcis de type S3/GCS, utilisez des chemins montés plutôt que des chemins ABFS pour
cp()etfastcp()des opérations. -
Limitations interrégions :
fastcp()ne prend pas en charge la copie de fichiers dans OneLake entre les régions. Utilisezcp()à la place. - Version du runtime : NotebookUtils est conçu pour fonctionner avec Spark 3.4 (Runtime v1.2) et versions ultérieures.
-
cp()comportement dans les notebooks Python : dans les notebooks Python,cp()utilise en interne le même mécanisme basé sur azcopy quefastcp(), de sorte que les deux méthodes se comportent de manière identique.
NotebookUtils fonctionne avec le système de fichiers de la même façon que les API Spark. Prenez l’utilisation de notebookutils.fs.mkdirs() et de Lakehouse par exemple :
| Utilisation | Chemin relatif à partir de la racine HDFS | Chemin d’accès absolu pour le système de fichiers ABFS | Chemin d’accès absolu pour le système de fichiers local dans le nœud conducteur |
|---|---|---|---|
| Lakehouse par défaut non | Non pris en charge | notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
| Lakehouse par défaut | Répertoire sous « Fichiers » ou « Tables » : notebookutils.fs.mkdirs("Files/<new_dir>") |
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
Pour le Lakehouse par défaut, les chemins d’accès aux fichiers sont montés dans votre bloc-notes avec un délai d’expiration du cache de fichiers par défaut de 120 secondes. Cela signifie que les fichiers sont mis en cache dans le dossier temporaire local du notebook pendant 120 secondes, même s’ils sont supprimés de Lakehouse. Si vous souhaitez modifier la règle de délai d’expiration, vous pouvez démonter les chemins de fichier Lakehouse par défaut et les monter à nouveau avec une valeur différente
fileCacheTimeout.Pour les configurations Lakehouse non par défaut, vous pouvez définir le paramètre approprié
fileCacheTimeoutpendant le montage des chemins Lakehouse. La définition du délai d’expiration sur 0 garantit que le dernier fichier est récupéré à partir du serveur Lakehouse.
Lister les fichiers
Pour répertorier le contenu d’un répertoire, utilisez notebookutils.fs.ls('Your directory path'). Par exemple:
notebookutils.fs.ls("Files/tmp") # Relative path works with different base paths depending on notebook type
notebookutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>") # Absolute path using ABFS file system
notebookutils.fs.ls("file:/tmp") # Full path of the local file system of driver node
L’API notebookutils.fs.ls() se comporte différemment lors de l’utilisation d’un chemin relatif, en fonction du type de notebook.
Dans un notebook Spark : le chemin d’accès relatif est relatif au chemin ABFSS par défaut de Lakehouse. Par exemple,
notebookutils.fs.ls("Files")pointe vers le répertoireFilesdans le Lakehouse par défaut.Par exemple:
notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")Dans un notebook Python : le chemin relatif est relatif au répertoire de travail du système de fichiers local, qui est
/home/trusted-service-user/workpar défaut . Par conséquent, vous devez utiliser le chemin d’accès complet au lieu d’un chemin d’accès relatifnotebookutils.fs.ls("/lakehouse/default/Files")pour accéder au répertoireFilesdans le Lakehouse par défaut.Par exemple:
notebookutils.fs.ls("/lakehouse/default/Files/sample_datasets/public_holidays.parquet")
Affichez les propriétés de fichier
Permet notebookutils.fs.ls() d’inspecter les propriétés de fichier telles que le nom de fichier, le chemin d’accès au fichier, la taille du fichier et si un élément est un fichier ou un répertoire.
files = notebookutils.fs.ls('Your directory path')
for file in files:
print(file.name, file.isDir, file.isFile, file.path, file.size)
Utilisez des chaînes f si vous souhaitez obtenir une sortie plus lisible :
files = notebookutils.fs.ls("Files/data")
for file in files:
print(f"Name: {file.name}, Size: {file.size}, IsDir: {file.isDir}, Path: {file.path}")
Créer un répertoire
Créez un répertoire s’il n’existe pas, y compris les répertoires parents nécessaires.
notebookutils.fs.mkdirs('new directory name')
notebookutils.fs.mkdirs("Files/<new_dir>") # Works with the default Lakehouse files using relative path
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") # Based on ABFS file system
notebookutils.fs.mkdirs("file:/<new_dir>") # Based on local file system of driver node
Copier un fichier
Copiez un fichier ou un répertoire entre les systèmes de fichiers. Définissez recurse=True pour copier des répertoires de manière récursive.
notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)
Note
Remarque du notebook Python : Dans les notebooks Python, cp() utilise en interne le même mécanisme basé sur azcopy que fastcp(), fournissant des performances efficaces pour les deux méthodes.
En raison des limitations du raccourci OneLake, lorsque vous devez utiliser notebookutils.fs.cp() pour copier des données à partir du raccourci de type S3/GCS, il est recommandé d’utiliser un chemin monté au lieu d’un chemin abfss.
Conseil / Astuce
Vérifiez toujours la valeur de retour booléenne pour vérifier si l’opération a réussi. Permet notebookutils.fs.exists() de vérifier le chemin source avant de démarrer une opération de copie.
L’exemple suivant montre une copie entre stockages du Lakehouse par défaut vers un compte ADLS Gen2 :
notebookutils.fs.cp(
"Files/local_data",
"abfss://<container>@<account>.dfs.core.windows.net/remote_data",
recurse=True
)
Fichier de copie performant
Utiliser fastcp pour des opérations de copie plus efficaces, en particulier avec des volumes de données volumineux. Le recurse paramètre est défini par défaut sur True.
notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)
Conseil / Astuce
Utilisez fastcp() plutôt que pour les transferts de cp() données volumineux. La fastcp méthode utilise azcopy sous le capot, ce qui offre un débit nettement meilleur pour les opérations de fichier en bloc. Dans les notebooks Python, les deux cp() et fastcp() utilisent le même mécanisme sous-jacent.
Gardez à l’esprit les éléments suivants :
-
notebookutils.fs.fastcp()ne prend pas en charge la copie de fichiers dans OneLake entre les régions. Dans ce cas, vous pouvez utilisernotebookutils.fs.cp()à la place. - En raison des limitations du raccourci OneLake, lorsque vous devez utiliser
notebookutils.fs.fastcp()pour copier des données à partir du raccourci de type S3/GCS, il est recommandé d’utiliser un chemin monté au lieu d’un chemin abfss.
Afficher un aperçu du contenu du fichier
Revenez aux premiers max_bytes octets d’un fichier sous la forme d’une chaîne UTF-8.
notebookutils.fs.head('file path', max_bytes)
Conseil / Astuce
Pour les fichiers volumineux, utilisez-le head() avec une valeur appropriée max_bytes pour éviter les problèmes de mémoire. La valeur par défaut est 100 Ko (1024 * 100).
L’exemple suivant lit les 1 000 premiers octets d’un fichier :
content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)
Note
La valeur par défaut pour max_bytes diffère selon les langues : les notebooks Python et Scala utilisent une valeur de 102400 (100 Ko), tandis que les notebooks R utilisent 65535 (64 Ko). Dans Scala, ce paramètre est nommé maxBytes.
Déplacer un fichier
Déplacez un fichier ou un répertoire entre les systèmes de fichiers.
notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)
Important
La valeur par défaut du create_path paramètre varie selon le runtime :
-
Notebooks Spark (PySpark, Scala, R) : par
Falsedéfaut (falseen Scala,FALSEen R). Le répertoire parent doit exister avant l’opération de déplacement. -
Notebooks Python : valeur
Truepar défaut . Le répertoire parent est créé automatiquement s’il n’existe pas.
Pour garantir un comportement cohérent entre les runtimes, définissez explicitement le create_path paramètre dans votre code. Dans Scala, ce paramètre est nommé createPath.
Utilisez des paramètres nommés si vous souhaitez du code plus clair :
notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)
Écrire un fichier
Écrivez une chaîne UTF-8 dans un fichier.
notebookutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it already exists
Ajouter du contenu à un fichier
Ajoutez une chaîne UTF-8 à un fichier.
notebookutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it doesn't exist
Important
notebookutils.fs.append() et notebookutils.fs.put() ne prennent pas en charge l’écriture simultanée dans le même fichier en raison d’un manque de garanties d’atomicité.
Lorsque vous utilisez l’API notebookutils.fs.append dans une for boucle pour écrire dans le même fichier, ajoutez une sleep instruction d’environ 0,5 à 1 seconde entre les écritures périodiques. La raison en est que l’opération notebookutils.fs.append interne de l’API flush est asynchrone : un court retard permet donc de veiller à l’intégrité des données.
import time
for i in range(100):
notebookutils.fs.append("Files/output/data.txt", f"Line {i}\n", True)
time.sleep(0.5) # Prevent data integrity issues
Supprimer un fichier ou un répertoire
Supprimez un fichier ou un répertoire. Définissez recurse=True pour supprimer les répertoires de manière récursive.
notebookutils.fs.rm('file path', recurse=True)
Vérifier si un fichier ou un répertoire existe
Vérifiez si un fichier ou un répertoire existe au chemin d’accès spécifié. Elle retourne True si le chemin existe ; sinon, il retourne False.
notebookutils.fs.exists("Files/data/input.csv")
Conseil / Astuce
Utilisez exists() avant d’effectuer des opérations de fichier pour éviter les erreurs. Par exemple, vérifiez qu’un fichier source existe avant d’essayer de le copier ou de le déplacer.
if notebookutils.fs.exists("Files/data/input.csv"):
notebookutils.fs.cp("Files/data/input.csv", "Files/backup/input.csv")
print("File copied successfully.")
else:
print("Source file not found.")
Obtenir les propriétés du fichier
Obtenir les propriétés d’un chemin d’accès sous la forme d’une carte de paires nom-valeur. La prise en charge est assurée seulement pour les chemins de stockage Blob Azure.
Note
La getProperties méthode est disponible uniquement dans les notebooks Python. Il n’est pas pris en charge dans les notebooks Spark (PySpark, Scala ou R).
Paramètres :
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
path |
Chaîne | Oui | Chemin d’accès ABFS au fichier ou au répertoire. |
Retourne : Un dictionnaire (map) contenant des propriétés de métadonnées telles que la taille du fichier, l’heure de création, l’heure de dernière modification et le type de contenu.
properties = notebookutils.fs.getProperties("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")
print(properties)