如何将非常大的 csv 从 AWS S3 传输到 Dynamo

How to ETL very large csv from AWS S3 to Dynamo

在这里寻找一些提示。我使用 python3 和 lambda 进行了一些安静的编码和研究。但是,超时是我在 atm 上遇到的最大问题。我正在尝试从 S3 读取一个非常大的 csv 文件 (3GB) 并将行推送到 DynamoDB。我目前一次读取大约 1024 * 32 字节,然后使用 pub/sub 模式将这些行推送到 dynamo DB(使用 asyncio 批量写入),它非常适合小文件,即 ~500K 行。当我有数百万行时它会超时。我尽量不使用 AWS glue and/or EMR。我有一些 constraints/limitations 和那些。

有谁知道这是否可以使用 Lambda 或步骤函数来完成?如果是这样,你能分享你的想法吗?谢谢!!

除了 lambda 时间限制外,当您在 AWS Lambda 中读取文件时,您可能 运行 进入 lambda 内存限制,因为 lambda 只有 /tmp 512 MB 的目录存储空间,这又取决于您的使用方式在 lambda 中读取文件。

如果您不想通过 AWS Glue 或 EMR,您可以做的另一件事是配置 EC2 和 运行 与您在 lambda 中 运行ning 相同的代码.为了使其具有成本效益,您可以使 EC2 成为瞬态的,即在您需要 运行 S3 到 DynamoDB 作业时提供它,并在作业完成后将其关闭。这种瞬态特性可以通过 Lambda 函数来实现。您也可以使用 Step Functions 进行编排。您可以查看的另一个选项是通过 AWS Datapipeline。