使用 R 从 Microsoft Azure 读取 csv 文件

Reading csv files from microsoft Azure using R

我最近开始使用数据块和 Azure。

我有 Microsoft Azure 存储资源管理器。我 运行 数据块上的 jar 程序 它在路径

中的 azure storgae 资源管理器中输出许多 csv 文件
..../myfolder/subfolder/output/old/p/ 

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

我的问题是有时我的运行会生成超过 10000 个 csv 文件 下载到本地驱动器需要很多时间。

我想知道是否有 tutorial/R 包可以帮助我阅读 上面路径中的 csv 文件而不下载它们。例如 有什么办法可以设置

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

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

编辑: 完整的 url 路径看起来像这样:

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

根据官方文档CSV Files of Azure Databricks, you can directly read a csv file in R of a notebook of Azure Databricks as the R example of the section Read CSV files notebook example所说,如下图

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

下面是我的步骤。

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

    安装 R 包 reticulate

  3. 安装 Python 包 azure-storage-blob 如下代码。

    %sh
    pip install azure-storage-blob
    

  4. 到运行Python脚本生成容器级别的sas令牌并使用它来获取带有sas令牌的blob列表url,请看下面的代码。

    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
    

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

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

    5.2。使用 R 包 data.table

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

    5.3。使用 R 包 readr

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

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

希望对您有所帮助。


更新您的快速问题: