从 r 中的 s3 一个一个读取文件

Mak*_*oni 3 r amazon-s3 amazon-web-services

我想读取 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)
Run Code Online (Sandbox Code Playgroud)

但是,如何在 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)

    .....
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*oni 5

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

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