R语言arrow包读取公开S3数据集如何设置无签名请求
问题解答
arrow包完全支持对公开S3存储桶发起无签名请求,对应AWS CLI --no-sign-request的配置只需要在创建S3文件系统连接时开启匿名模式即可。
之前代码报错是因为arrow默认访问S3时会自动读取本地存储的AWS凭证给请求签名,访问无需认证的公开存储桶时,签名后的请求反而会被服务端拦截,触发连接错误。
可用实现方式
最稳妥的写法是先单独创建匿名模式的S3文件系统实例,再指向目标数据集路径,这种写法不会影响其他带认证的S3访问操作,所有支持S3功能的arrow版本都兼容:
library(arrow) # 创建无签名的S3客户端,效果和aws cli加--no-sign-request参数完全一致 s3_client <- S3FileSystem$create( anonymous = TRUE, region = "us-east-1" # ookla公开性能数据集存储在us-east-1区域,指定区域可减少额外重定向开销 ) # 加载目标parquet数据集 ds <- open_dataset( sources = s3_client$path("ookla-open-data/parquet/performance/"), partitioning = c("type", "year", "quarter"), hive_style = TRUE, format = "parquet" )
如果使用的是8.0.0及以上版本的arrow,也可以不用单独创建S3客户端,直接在open_dataset调用里传入S3连接参数,效果相同:
ds <- open_dataset( sources = "s3://ookla-open-data/parquet/performance/", partitioning = c("type", "year", "quarter"), hive_style = TRUE, format = "parquet", s3_options = list(anonymous = TRUE, region = "us-east-1") )
补充:如果运行时还是出现连接类报错,可以检查下本地是否配置了全局AWS访问代理、或者网络是否能正常连通AWS S3服务,这类问题和arrow包本身的配置无关。
内容的提问来源于stack exchange,提问作者Brian Connelly
相关产品推荐
相关产品推荐

