如何使用 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
一次全部完成。
我正在尝试使用以下代码从 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
一次全部完成。