python-3.x - 如何 ETL 非常大的 csv 从 AWS S3 到 Dynamo
问题描述
在这里寻找一些提示。我使用 python3 和 lambda 进行了一些安静的编码和研究。但是,超时是我在 atm 上苦苦挣扎的最大问题。我正在尝试从 S3 读取一个非常大的 csv 文件(3GB)并将行推送到 DynamoDB。我目前一次读取大约 1024 * 32 字节,然后使用 pub/sub 模式将行推送到 dynamo DB(使用 asyncio 批量写入),它适用于小文件,即 ~500K 行。当我有数百万行时,它会超时。我试图不使用 AWS 胶水和/或 EMR。我对这些有一些限制/限制。
有谁知道这是否可以使用 Lambda 或步进函数来完成?如果是这样,你能分享你的想法吗?谢谢!!
解决方案
除了 lambda 时间限制之外,您在 AWS Lambda 中读取文件时可能会遇到 lambda 内存限制,因为 lambda 仅/tmp
具有 512 MB 的目录存储空间,这又取决于您在 lambda 中读取文件的方式。
如果您不想通过 AWS Glue 或 EMR,您可以做的另一件事是预置 EC2 并从那里运行您在 lambda 中运行的相同代码。为了使其具有成本效益,您可以将 EC2 设置为瞬态,即在您需要将 S3 运行到 DynamoDB 作业时对其进行配置,并在作业完成后将其关闭。这种瞬态特性可以通过 Lambda 函数来实现。您也可以使用 Step Functions 进行相同的编排。您可以查看的另一个选项是通过 AWS Datapipeline。
推荐阅读
- html - 在 Ivy 的 Angular 9 中,“对话框”不是已知元素
- c - 指向 const char 指针的地址的数据类型
- docker - docker-compose 仅将主机上存在的文件挂载到容器
- jquery - 如何在wordpress类别侧边栏菜单中显示活动子菜单
- javascript - 有没有办法从 nodejs 服务器渲染到 chrome 扩展弹出窗口?
- php - wordpress:在发送电子邮件时将字段保存到数据库 - 错误 500
- html - 浏览器如何处理异常?
- angularjs - 尝试从 JSON 调用变量
- python - 类中的方法未激活
- ios - 在 Swift 中重复播放声音文件?