Сохранение вывода Matplotlib в хранилище BLOB-объектов на блоках данных - PullRequest
0 голосов
/ 12 февраля 2020

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

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

path = 'wasbs://test@someblob.blob.core.windows.net/'

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

[Errno 2] Нет такого файла или каталога: 'wasbs: // test@someblob.blob.core.windows.net/'

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

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

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 голосов
/ 14 февраля 2020

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

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

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

Сохранение вывода Matplotlib в Файловая система блоков данных (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')

enter image description here

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

Существует два способа скопировать файл из DBFS в Azure Stroage Blob.

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

доступ к Azure хранилищу BLOB-объектов напрямую путем установки «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 в Azure Хранилище BLOB-объектов:

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

enter image description here

Метод 2: Монтирование Azure Контейнеры хранилища BLOB-объектов в DBFS

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

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

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

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

enter image description here

По следующим Метод 1 или 2 вы можете успешно сохранить в Azure хранилище BLOB-объектов.

enter image description here

Подробнее см. " Блоки данных - Azure Blob Storage".

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

...