首页 > 解决方案 > 如何 ETL 非常大的 csv 从 AWS S3 到 Dynamo

问题描述

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

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

标签: python-3.xaws-lambdaaws-step-functions

解决方案


除了 lambda 时间限制之外,您在 AWS Lambda 中读取文件时可能会遇到 lambda 内存限制,因为 lambda 仅/tmp具有 512 MB 的目录存储空间,这又取决于您在 lambda 中读取文件的方式。

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


推荐阅读