如何使用 C# 从 S3 存储桶中读取和处理大型 text/CSV 文件?

How to read and process large text/CSV files from an S3 bucket using C#?

我正在尝试使用以下代码从 s3 存储桶中读取 15 MB CSV 文件。

ListObjectsResponse object1 = await S3Client.ListObjectsAsync("mybucket");
foreach (S3Object s3File in object1.S3Objects)
{
    var response = await S3Client.GetObjectAsync("mybucket", s3File.Key);

    var request = new GetObjectRequest()
    {
        BucketName = "mybucket",
        Key = files.Key
    };

    using (var res = S3Client.GetObjectAsync(request))
    {
        StreamReader sReader = new StreamReader(res.Result.ResponseStream); //Time out here
         string? line = sReader.ReadLine();
    }
}

以上代码适用于较小的文件。但如果文件有超过 100K+ 行,则 lambda 函数在 aws 控制台中超时。我想处理 s3 存储桶文件中的所有行。

能否让我知道实现这个的最佳方法?

增加您的 Lambda 超时,(目前)硬限制为 15 minutes

如果您的 CSV 处理时间超过 15 分钟,Lambda 函数不适合您的工作 - 它们旨在快速处理。

什么是正确的解决方案超出了范围,但您或许可以利用现场 EC2 实例、步骤函数、运行 Fargate 上的容器等

相关:要加快您当前的流程,请在开始时向 S3 发出并行请求,然后一次性处理,即创建任务,然后 await 一次全部完成。