使用R从Microsoft Azure读取CSV文件

时间:2019-08-05 08:52:34

标签: r azure databricks

我最近开始处理数据块和Azure。

我有Microsoft Azure Storage Explorer。我在databricks上运行了一个jar程序 可以在azp storgae资源管理器中的路径中输出许多csv文件

..../myfolder/subfolder/output/old/p/ 

我通常要做的是进入文件夹p并下载所有csv文件 右键单击p文件夹,然后在我的本地驱动器上单击download 并使用R中的这些csv文件进行任何分析。

我的问题是有时我的跑步可能会生成超过10000个csv文件 将其下载到本地驱动器会花费很多时间。

我想知道是否有一个教程/ R包可以帮助我阅读 来自上面路径的csv文件,而无需下载它们。例如 有什么办法可以设置

..../myfolder/subfolder/output/old/p/  

作为我的工作目录,并以与我相同的方式处理所有文件。

编辑: 路径的完整网址如下所示:

https://temp.blob.core.windows.net/myfolder/subfolder/output/old/p/

1 个答案:

答案 0 :(得分:0)

根据Azure Databricks的官方文档CSV Files,您可以直接读取Azure Databricks笔记本的R中的csv文件,如Read CSV files notebook example部分的R示例所示,如下图所示

enter image description here

或者,我使用R包reticulate和Python包azure-storage-blob直接从带有Azure Blob存储的sas令牌的blob URL中读取csv文件。

这是我的步骤,如下所示。

  1. 我在Azure Databricks工作区中创建了一个R笔记本。
  2. 要通过代码reticulate安装R软件包install.packages("reticulate")

    enter image description here

  3. 要安装Python软件包azure-storage-blob,如下所示。

    %sh
    pip install azure-storage-blob
    

    enter image description here

  4. 要运行Python脚本以生成容器级别的sas令牌并使用它来获取具有sas令牌的blob网址的列表,请参见下面的代码。

    library(reticulate)
    py_run_string("
    from azure.storage.blob.baseblobservice import BaseBlobService
    from azure.storage.blob import BlobPermissions
    from datetime import datetime, timedelta
    
    account_name = '<your storage account name>'
    account_key = '<your storage account key>'
    container_name = '<your container name>'
    
    blob_service = BaseBlobService(
        account_name=account_name,
        account_key=account_key
    )
    
    sas_token = blob_service.generate_container_shared_access_signature(container_name, permission=BlobPermissions.READ, expiry=datetime.utcnow() + timedelta(hours=1))
    
    blob_names = blob_service.list_blob_names(container_name, prefix = 'myfolder/')
    blob_urls_with_sas = ['https://'+account_name+'.blob.core.windows.net/'+container_name+'/'+blob_name+'?'+sas_token for blob_name in blob_names]
    ")
    blob_urls_with_sas <- py$blob_urls_with_sas
    

    enter image description here

  5. 现在,我可以在R中使用不同的方式从带有sas令牌的blob URL中读取csv文件,如下所示。

    5.1。 df <- read.csv(blob_urls_with_sas[[1]])

    enter image description here

    5.2。使用R软件包data.table

    install.packages("data.table")
    library(data.table)
    df <- fread(blob_urls_with_sas[[1]])
    

    enter image description here

    5.3。使用R软件包readr

    install.packages("readr")
    library(readr)
    df <- read_csv(blob_urls_with_sas[[1]])
    

    enter image description here

注意:对于reticulate库,请参阅RStudio文章Calling Python from R

希望有帮助。


更新您的快速问题:

enter image description here