首页 > 解决方案 > 从 r 中的 s3 中一一读取文件

问题描述

我想读取 s3 目录中给出的 r 中的 csv 文件。每个文件大小超过 6GB,每个文件都需要在 r 中进一步计算。想象一下,我在 s3 文件夹中有 10 个文件,我需要在之前分别阅读每个文件for loop。首先,我尝试了这个,它适用于我知道 csv 文件名称的情况:

library(aws.s3)
Sys.setenv("AWS_ACCESS_KEY_ID" = "xyy",
           "AWS_SECRET_ACCESS_KEY" = "yyx")

data <- 
  s3read_using(FUN=read.csv, object="my_folder/file.csv",
               sep = ",",stringsAsFactors = F, header=T)

但是,如果没有在 s3read_using 函数中明确给出它们的名称,我如何访问多个文件。这是必要的,因为我partition()在 Spark 中使用它将原始数据集划分为具有一些通用名称(例如part1-0839709037fnfih.csv)的子部分。如果我可以自动列出 s3 文件夹中的 csv 文件并在计算之前使用它们,那就太好了。

get_ls_files <- .... #gives me list of all csv files in S3 folder

for (i in 1:length(get_ls_files)){

    filename = get_ls_files[i]

    tmp = s3read_using(FUN=read.csv, object=paste("my_folder/",filename),
               sep = ",",stringsAsFactors = F, header=T)

    .....
}

标签: ramazon-web-servicesamazon-s3

解决方案


如果有人需要,我找到了答案,尽管文档不好。要获取特定 S3 文件夹中的文件列表,您需要使用get_bucket并定义一个prefix. 在此之后,搜索扩展名列表并获取特定 S3 文件夹.csv中所有文件的列表。.csv

tmp = get_bucket(bucket = "my_bucket", prefix="folder/subfolder")
list_csv = data.frame(tmp)
csv_paths = list_csv$Key[grep(".csv", list_csv$Key)]

推荐阅读