R语言中是否存在AzureStor与arrow结合使用的成熟方案?
回答
arrow 本身已经内置了 Azure 存储的原生支持,不需要额外适配 AzureStor 语法就能直接创建可供 arrow 调用的 FileSystem 类实例,具体方法如下:
1. 优先使用原生 AzureFileSystem 实现(推荐)
CRAN 发布的正式版 arrow 从 4.0 版本开始默认开启 Azure Blob Storage、ADLS Gen2 存储的支持,不需要依赖 AzureStor 包,也不需要手动编译,安装即能用。如果调用时提示Azure相关功能不可用,升级到CRAN最新版arrow即可。
你可以根据自己的认证方式,直接调用 AzureFileSystem$create() 生成符合arrow要求的文件系统实例,常用认证场景的代码如下:
- 存储账户密钥认证(最常用的本地开发场景)
library(arrow) fs <- AzureFileSystem$create( account_name = "你的存储账户名称", account_key = "你的存储账户访问密钥" # 如果使用ADLS Gen2存储,可额外添加参数 scheme = "abfss" )
- SAS令牌认证
fs <- AzureFileSystem$create( account_name = "你的存储账户名称", sas_token = "你的SAS令牌字符串" )
- 服务主体认证(企业生产环境常用)
fs <- AzureFileSystem$create( account_name = "你的存储账户名称", tenant_id = "Azure租户ID", client_id = "服务主体客户端ID", client_secret = "服务主体客户端密钥" )
创建完成后,这个fs对象的用法和S3 FileSystem完全一致,不需要修改后续的arrow读写逻辑:
# 读取指定容器内的parquet文件 df <- read_parquet(fs$path("你的容器名", "数据集路径/文件.parquet")) # 写入文件到Azure存储 write_parquet(df, fs$path("你的容器名", "输出路径/result.parquet"))
2. 已有AzureStor配置的复用方法
AzureStor 和 arrow 的文件系统实现是完全独立的,没有直接的对象转换接口,不需要强行把AzureStor生成的连接对象转成arrow可用的类。二者的认证参数是一一对应的,你只需要把之前传给AzureStor的账户名、密钥、SAS令牌等参数抽出来,直接传入AzureFileSystem$create()即可,几乎没有适配成本。
注意:不要尝试通过封装R层IO方法的方式强行桥接AzureStor和arrow,arrow的文件系统层基于底层C++实现,原生直连的性能远高于套一层R层AzureStor请求的方案,还能避免很多序列化、断点续传相关的兼容问题。
内容的提问来源于stack exchange,提问作者Dean MacGregor
相关产品推荐
相关产品推荐

