0
votes

Enregistrement de la sortie Matplotlib dans le stockage Blob sur Databricks

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 ...


0 commentaires

3 Réponses :


0
votes

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")})

entrez la description de l'image ici

É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>")

entrez la description de l'image ici

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')

entrez la description de l'image ici

En suivant la méthode 1 ou 2, vous pouvez enregistrer la sortie dans Azure Blob Storage.

entrez la description de l'image ici

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.


0 commentaires

0
votes

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 )


0 commentaires

0
votes

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 .


0 commentaires