【问题标题】:Saving Matplotlib Output to Blob Storage on Databricks将 Matplotlib 输出保存到 Databricks 上的 Blob 存储
【发布时间】:2020-05-28 02:15:48
【问题描述】:

我正在尝试使用此处提供的方法将 matplotlib 图形写入 Azure blob 存储: Saving Matplotlib Output to DBFS on Databricks.

但是,当我将代码中的路径替换为

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

我收到此错误

[Errno 2] 没有这样的文件或目录:'wasbs://test@someblob.blob.core.windows.net/'

我不明白这个问题...

【问题讨论】:

    标签: matplotlib databricks azure-databricks


    【解决方案1】:

    根据我的研究,您不能将 Matplotlib 输出直接保存到 Azure Blob 存储。

    您可以按照以下步骤将 Matplotlib 输出保存到 Azure Blob Storage:

    第 1 步:您需要先将其保存到 Databrick 文件系统 (DBFS),然后将其复制到 Azure Blob 存储。

    将 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 文件系统复制到 Azure Blob 存储。

    有两种方法可以将文件从 DBFS 复制到 Azure Blob Stroage。

    方法一:直接访问 Azure Blob 存储

    通过设置“Spark.conf.set”直接访问 Azure Blob 存储并将文件从 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')
    

    方法二:将 Azure Blob 存储容器挂载到 DBFS

    您可以将 Blob 存储容器或容器内的文件夹装载到 Databricks 文件系统 (DBFS)。 mount 是一个指向 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')

    按照 Method1 或 Method2 可以成功将输出保存到 Azure Blob Storage。

    更多详情请参考“Databricks - Azure Blob Storage”。

    希望这会有所帮助。如果您有任何进一步的疑问,请告诉我们。

    【讨论】:

      【解决方案2】:

      您可以使用 .savefig() 直接写入 Azure blob 存储 - 您只需要先挂载 blob 容器。

      以下对我有用,我将 blob 容器安装为 /mnt/mydatalakemount

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

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

      关于安装 blob 容器的文档是 here

      【讨论】:

        【解决方案3】:

        到目前为止,这也是我想出的。为了从 blob 重新加载图像并再次在 databricks 笔记本中将其显示为 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 )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-24
          • 2021-07-11
          • 2019-07-28
          • 2020-02-11
          • 2021-03-19
          • 1970-01-01
          • 2020-07-05
          • 2020-10-08
          相关资源
          最近更新 更多