将 parquet 数据从 s3 批量加载到 dynamob 表

问题描述 投票:0回答:1

场景: 假设单个 s3 存储桶包含 300 多个对象,所有这些对象的总大小范围为 1GB-2.5GB 我将拥有多个这样的 s3 存储桶。但是,为了简单起见,我只需要 1 个 s3 存储桶即可。

在问这个问题之前,我确实检查了相关链接,例如将 parquet 文件从 S3 加载到 DynamoDB

但是,对于我的用例:

  1. 我想从 s3 批量加载到 dynamodb。我找到了 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataImport.HowItWorks.html
  2. 不幸的是,如果我遵循这种方法,今天不支持“镶木地板”格式。

到目前为止我做了什么?

  1. 然后从 s3 读取 parquet 文件
  2. 用它创建一个本地 pandas 数据框。
  3. 将数据帧中的行转换为 JSON 字符串
  4. 使用batch_writer将数据帧写入DynamoDB

然而,就 DynamoDB 写入花费的资金而言,上述方法的成本也很高。

因此,上面链接中提到的用例非常适合我,即

  • 能够在每次摄取时创建一个新表
  • 能够从 s3 将数据批量加载到这个新表中

我只是被困在镶木地板转换上

然后我想出了第二种方法:

  1. 设置 AWS Glue 作业以从 s3 以 parquet 格式读取数据
  2. 应用转换并转储到 DynamoDB

但是,我不确定第二种方法是否会消耗任何 WriteCapacity,否则所有这些节省写入成本的努力都将付诸东流。

有什么指示还是我只是想错了方向?

amazon-web-services amazon-s3 amazon-dynamodb
1个回答
0
投票

我将在未来 1-2 个月内发布一篇博客文章来解决这个问题,目前正处于草稿阶段。

本质上,您需要做的是从镶木地板数据创建 DDB-JSON。您可以使用 boto3 中的序列化器来做到这一点:

https://boto3.amazonaws.com/v1/documentation/api/1.24.61/_modules/boto3/dynamodb/types.html

创建适合导入所需格式的项目的 S3 文件:

{Item:{....}},

© www.soinside.com 2019 - 2024. All rights reserved.