Сохранение вывода Matplotlib в хранилище BLOB-объектов на Databricks

Я пытаюсь записать цифры matplotlib в хранилище BLOB-объектов Azure, используя метод, представленный здесь: Сохранение вывода Matplotlib в DBFS на Databricks.

Однако, когда я заменяю путь в коде на

path = 'wasbs://[email protected]/'

Я получаю эту ошибку

[Errno 2] Нет такого файла или каталога: 'wasbs: //[email protected]/'

Я не понимаю в чем проблема ...


person Lossa    schedule 12.02.2020    source источник


Ответы (3)


Согласно моим исследованиям, вы не можете напрямую сохранять выходные данные Matplotlib в хранилище BLOB-объектов Azure.

Чтобы сохранить выходные данные Matplotlib в хранилище BLOB-объектов Azure, выполните следующие действия:

Шаг 1. Сначала необходимо сохранить его в файловой системе Databrick (DBFS), а затем скопировать в хранилище BLOB-объектов Azure.

Сохранение вывода Matplotlib в файловую систему Databricks (DBFS): мы используем следующую команду для сохранения вывода в DBFS: plt.savefig('/dbfs/myfolder/Graph1.png')

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

введите здесь описание изображения

Шаг 2. Скопируйте файл из файловой системы Databricks в хранилище BLOB-объектов Azure.

Есть два метода копирования файла из DBFS в Azure Blob Stroage.

Метод 1. Доступ напрямую к хранилищу BLOB-объектов Azure

Получите доступ к хранилищу BLOB-объектов Azure напрямую, установив Spark.conf.set и скопировав файл из DBFS в хранилище BLOB-объектов.

spark.conf.set("fs.azure.account.key.< Blob Storage Name>.blob.core.windows.net", "<Azure Blob Storage Key>")

Используйте dbutils.fs.cp для копирования файла из DBFS в хранилище BLOB-объектов Azure:

dbutils.fs.cp('dbfs:/myfolder/Graph1.png', 'wasbs://<Container>@<Storage Name>.blob.core.windows.net/Azure')

введите здесь описание изображения

Метод 2. Подключите контейнеры хранилища BLOB-объектов Azure к DBFS

Вы можете подключить контейнер хранилища BLOB-объектов или папку внутри контейнера к файловой системе Databricks (DBFS). Монтирование - это указатель на контейнер хранилища BLOB-объектов, поэтому данные никогда не синхронизируются локально.

dbutils.fs.mount(
  source = "wasbs://[email protected]/Azure",
  mount_point = "/mnt/chepra",
  extra_configs = {"fs.azure.sas.sampledata.chepra.blob.core.windows.net":dbutils.secrets.get(scope = "azurestorage", key = "azurestoragekey")})

Используйте dbutils.fs.cp, скопируйте файл в контейнер хранилища BLOB-объектов Azure:

dbutils.fs.cp ('dbfs: /myfolder/Graph1.png', '/ dbfs / mnt / chepra')

введите здесь описание изображения

Следуя Method1 или Method2, вы можете успешно сохранить выходные данные в хранилище BLOB-объектов Azure.

введите здесь описание изображения

Дополнительные сведения см. В разделе "Databricks - хранилище BLOB-объектов Azure ".

Надеюсь это поможет. Сообщите нам, если у вас возникнут дополнительные вопросы.

person CHEEKATLAPRADEEP-MSFT    schedule 14.02.2020

Это то, что я до сих пор придумал. Чтобы перезагрузить изображение из blob и снова отобразить его как png в записной книжке databricks, я использую следующий код:

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 )
person Lossa    schedule 14.02.2020

Вы можете писать с помощью .savefig () непосредственно в хранилище BLOB-объектов Azure - вам просто нужно предварительно смонтировать контейнер BLOB-объектов.

Следующее работает для меня, где я смонтировал контейнер больших двоичных объектов как / mnt / mydatalakemount

plt.savefig('/dbfs/mnt/mydatalakemount/plt.png')

or

fig.savefig('/dbfs/mnt/mydatalakemount/fig.png')

Документация по установке контейнера больших двоичных объектов: здесь.

person Orhan Celik    schedule 14.11.2020