【问题标题】:Unable to write a csv file in S3 bucket from R无法从 R 在 S3 存储桶中写入 csv 文件
【发布时间】:2019-11-15 18:57:54
【问题描述】:

我正在尝试使用以下代码将 csv 文件写入 Amazon S3 存储桶

s3write_using(gene_read_counts, FUN = write.csv, object = "gene_read_counts_test.csv", bucket = "test-bioinformatics-dev-bkt/research/bioinformatics/colo_final/data/processed/colorectal", row.names=FALSE)

我收到以下错误

文件大小为 71619789。考虑设置“multipart = TRUE”。 parse_aws_s3_response(r, Sig, verbose = verbose) 中的错误:禁止 (HTTP 403)。

【问题讨论】:

    标签: r amazon-web-services amazon-s3


    【解决方案1】:

    在查看错误时,可能有 2 个方面。

    1. 似乎在上传大文件时提示使用 AWS-S3 分段上传的错误。分段上传提供更快、更灵活的上传到 Amazon S3。可以通过

      • 将对象/文件分成小块。
      • 使用 S3 API 的 CreateMultipartUpload 上传初始化。
      • 使用分段上传上传部分对象。使用S3 API的UploadPartCopy操作
      • 完成分段上传。使用 S3 API 的CompleteMultipartUpload 操作。
      • 如果任何部分上传失败,同时必须实现AbortMultipartUpload。使用AbortMultipartUpload,之前上传的任何部分所占用的存储空间都将被释放。

      请参阅以下 AWS 文档。 https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html

    2. Forbidden (HTTP 403) 错误提示权限被拒绝。在这种情况下,如果用户有权访问 S3 对象,请检查 IAM 角色。

    由于您使用“R”语言在 S3 中写入文件。我建议使用Put_Object 函数并在函数中设置multipart = TRUE 部分上传文件。

    你可以使用下面的代码

       put_object(filename, object, bucketname, multipart = TRUE, acl = c("private",
         "public-read", "public-read-write", "aws-exec-read", "authenticated-read",
         "bucket-owner-read", "bucket-owner-full-control"), headers = list(), ...)
    

    当你在上面的函数中说multipart = TRUE时,它会创建所提供对象的部分或块,并在S3中部分上传。

    【讨论】:

    • 谢谢你能帮忙举个例子吗。
    • @drpreeti3628,我已经更新了使用 Put_object 函数进行分段上传的答案
    • 我尝试了以下代码,但得到以下错误-> x utils::write.csv(gene_read_counts, x) > put_object( rawConnectionValue(x), file = gene_read_counts, object = "/data/processed/gene_read_counts_test2.csv", bucket = "kite-bioinformatics-dev-bkt", multipart = TRUE, acl = c("private", "public-read ", "public-read-write", "aws-exec-read", "authenticated-read", "bucket-owner-read", "bucket-owner-full-control"), headers = c('x- amz-server-side-encryption' = 'AES256')) 错误:如果序列化为 FALSE,参数对象必须是字符或原始向量类型
    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 2022-01-24
    • 1970-01-01
    • 2018-05-05
    • 2016-09-26
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多