首页 > 解决方案 > 将文件从数据块复制到 blob 存储会导致文件大小为 0

问题描述

我正在尝试使用以下命令将文件从数据块复制到 blob 存储中的某个位置:

dbutils.fs.cp('dbfs:/FileStore/tables/data/conv_subset_april_2018.csv',"wasb://blobname@outputcontainername.blob.core.windows.net/" + "conv_subset_april_2018" + ".csv")

现在 blobname 和 outputcontainername 是正确的,并且我之前已将文件复制到存储位置。直到今天,当我执行命令时,我才得到大小为 0 的文件。文件 data.csv 确实存在于给定位置,并且不是空的或损坏的。有谁知道会发生什么?屏幕截图显示了我的意思。

大小为 0 的文件

标签: pythonazureazure-blob-storagedatabricks

解决方案


据我所知,有两种方法可以将文件从 Azure Databricks 复制到 Azure Blob 存储。请参阅Azure DatabricksAzure Blob Storage主题的官方文档Data Sources以了解更多详细信息。

下面是我的示例代码。

  1. 若要将 Azure Blob 存储容器作为dbfs路径装载到 Azure Databricks,您可以cp将数据块路径中的文件指向 Blob 存储的装载路径。请参阅使用 DBFS 装载 Azure Blob 存储容器

    dbutils.fs.mount(
        source = "wasbs://<your-container-name>@<your-storage-account-name>.blob.core.windows.net",
        mount_point = "/mnt/<mount-name>",
        extra_configs = {"fs.azure.account.key.<your-storage-account-name>.blob.core.windows.net":"<your-storage-account-key>"})
    dbutils.fs.cp('dbfs:/FileStore/tables/data/conv_subset_april_2018.csv','dbfs:/mnt/<mount-name>/conv_subset_april_2018.csv')
    # Or dbutils.fs.cp('/FileStore/tables/data/conv_subset_april_2018.csv','/mnt/<mount-name>/conv_subset_april_2018.csv')
    
  2. 设置帐户访问密钥或为容器设置 SAS,然后将文件从dbfs文件路径复制到wasbs文件路径。

    spark.conf.set(
        "fs.azure.account.key.<your-storage-account-name>.blob.core.windows.net",
        "<your-storage-account-access-key>")
    # Or 
    # spark.conf.set(
    #     "fs.azure.sas.<your-container-name>.<your-storage-account-name>.blob.core.windows.net",
    #     "<complete-query-string-of-your-sas-for-the-container>")
    dbutils.fs.cp('/FileStore/tables/data/conv_subset_april_2018.csv','wasbs://blobname@outputcontainername.blob.core.windows.net//conv_subset_april_2018.csv')
    

希望能帮助到你。


推荐阅读