R语言中s3write_using传递append=TRUE至write_csv失效问题
解决s3write_using传递append参数至write_csv的问题
直接给s3write_using传递append=TRUE无法实现S3文件追加的原因是:
- S3是对象存储系统,不支持直接对已有对象进行追加写入操作,只能覆盖或创建新对象。
s3write_using的工作逻辑是先将数据写入本地临时文件,再上传至S3覆盖原有对象,append=TRUE仅对本地临时文件生效,而每次调用都会生成新的临时文件,自然无法实现追加效果。
正确的实现方式是先合并本地新数据与S3上的已有数据,再上传覆盖原文件,具体代码如下:
library(dplyr) library(readr) library(aws.s3) # 定义S3存储信息 bucket_name <- "myBUCKET" object_path <- "myLocationToSaveCSV.csv" # 检查目标文件是否存在于S3 file_exists <- object_exists(object = object_path, bucket = bucket_name) if (file_exists) { # 下载并读取S3上的已有数据 existing_data <- s3read_using(FUN = read_csv, bucket = bucket_name, object = object_path) # 合并新旧数据 combined_data <- bind_rows(existing_data, data) } else { # 文件不存在时直接使用新数据 combined_data <- data } # 上传合并后的数据至S3 combined_data %>% s3write_using(FUN = write_csv, bucket = bucket_name, object = object_path)
注意事项
- 如果数据量极大,下载合并再上传的效率较低,可考虑将新数据写入独立文件,后续批量合并。
- 确保读取已有数据时的格式与新数据一致,避免合并时出现类型不匹配问题。
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

