J'essaie d'écrire des chiffres matplotlib dans le stockage d'objets blob Azure en utilisant la méthode fournie ici: Enregistrement de la sortie Matplotlib dans DBFS sur Databricks .
Cependant, lorsque je remplace le chemin dans le code par
path = 'wasbs://test@someblob.blob.core.windows.net/'
J'obtiens cette erreur
[Errno 2] Aucun fichier ou répertoire de ce type: 'wasbs: //test@someblob.blob.core.windows.net/'
Je ne comprends pas le problème ...
3 Réponses :
Selon mes recherches, vous ne pouvez pas enregistrer directement la sortie Matplotlib dans Azure Blob Storage.
Vous pouvez suivre les étapes ci-dessous pour enregistrer la sortie Matplotlib dans Azure Blob Storage:
Étape 1: vous devez d'abord l'enregistrer dans le système de fichiers Databrick (DBFS), puis le copier dans le stockage Blob Azure.
Enregistrement de la sortie Matplotlib dans Databricks File System (DBFS): Nous utilisons la commande ci-dessous pour enregistrer la sortie dans DBFS: plt.savefig('/dbfs/myfolder/Graph1.png')
dbutils.fs.mount( source = "wasbs://sampledata@chepra.blob.core.windows.net/Azure", mount_point = "/mnt/chepra", extra_configs = {"fs.azure.sas.sampledata.chepra.blob.core.windows.net":dbutils.secrets.get(scope = "azurestorage", key = "azurestoragekey")})
Étape 2: copiez le fichier du système de fichiers Databricks vers Azure Blob Storage.
Il existe deux méthodes pour copier un fichier de DBFS vers Azure Blob Stroage.
Méthode 1: accéder directement au stockage Blob Azure
Accédez directement à Azure Blob Storage en définissant «Spark.conf.set» et copiez le fichier de DBFS vers Blob Storage.
dbutils.fs.cp('dbfs:/myfolder/Graph1.png', 'wasbs://<Container>@<Storage Name>.blob.core.windows.net/Azure')
Utilisez dbutils.fs.cp pour copier le fichier de DBFS vers Azure Blob Storage:
spark.conf.set("fs.azure.account.key.< Blob Storage Name>.blob.core.windows.net", "<Azure Blob Storage Key>")
Méthode 2: monter des conteneurs de stockage Blob Azure sur DBFS
Vous pouvez monter un conteneur de stockage Blob ou un dossier à l'intérieur d'un conteneur dans Databricks File System (DBFS). Le montage est un pointeur vers un conteneur de stockage Blob, de sorte que les données ne sont jamais synchronisées localement.
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'fruits':['apple','banana'], 'count': [1,2]}) plt.close() df.set_index('fruits',inplace = True) df.plot.bar() plt.savefig('/dbfs/myfolder/Graph1.png')
Utilisez dbutils.fs.cp pour copier le fichier dans le conteneur de stockage Blob Azure: Use dbutils.fs.cp copy the file to Azure Blob Storage Container:
dbutils.fs.cp ('dbfs: /myfolder/Graph1.png', '/ dbfs / mnt / chepra')
En suivant la méthode 1 ou 2, vous pouvez enregistrer la sortie dans Azure Blob Storage.
Pour plus d'informations, reportez-vous à « Databricks - Stockage d'objets blob Azure ».
J'espère que cela t'aides. Faites-nous savoir si vous avez d'autres questions.
C'est ce que j'ai également proposé jusqu'à présent. Afin de recharger l'image à partir de blob et de l'afficher à nouveau au format png dans un bloc-notes databricks, j'utilise à nouveau le code suivant:
blob_path = ... dbfs_path = ... dbutils.fs.cp( blob_path, dbfs_path ) with open( dbfs_path, "rb" ) as f: im = BytesIO( f.read() ) img = mpimg.imread( im ) imgplot = plt.imshow( img ) display( imgplot.figure )
Vous pouvez écrire avec .savefig () directement sur le stockage d'objets blob Azure - il vous suffit de monter le conteneur d'objets blob avant.
Ce qui suit fonctionne pour moi, où j'avais monté le conteneur d'objets blob en tant que / mnt / mydatalakemount
fig.savefig('/dbfs/mnt/mydatalakemount/fig.png')
ou
plt.savefig('/dbfs/mnt/mydatalakemount/plt.png')
La documentation sur le montage du conteneur d'objets blob se trouve ici .