AWS 上的大 CSV 文件处理建议

Posted

技术标签:

【中文标题】AWS 上的大 CSV 文件处理建议【英文标题】:Big CSV files processing suggestion on AWS 【发布时间】:2021-08-07 06:21:14 【问题描述】:

需要一些关于我可以在 AWS 上用于以下情况的服务的建议。

一个存储桶每天接收大约 60 个 gzip 压缩的 CSV 文件。它们都是最大大小,即 5GB。 CSV 中的一行是一条订单信息,如下所示:

order_id, customer_id, item_id, payment_method, amount
1,        1,           1,       cash,           10.00
1,        1,           2,       cash,           11.00
2,        1,           1,       credit,         12.00
3,        2,           3,       cash,           13.00
3,        2,           4,       cash,           14.00
3,        2,           5,       credit,         15.00

客户的订单可以在每个 gzip 压缩文件中分发而无需排序,我正在开发一个系统,可以将 60 个文件中客户的 ALL 订单汇总到一个 Customer 实例定义如下:

class Customer 
    private String customerId;
    private Set<Order> orders;


class Order 
    private String orderId;
    private Set<Item> items;


class Item 
    private String itemId;
    private String paymentMethod;
    private BigDecimal amount;

最终我将获得 2 个 ID 为 1 和 2 的客户实例,其中包含他们的订单和商品信息,并将这 2 个客户实例发送到另一个服务以进行进一步处理。

目前,我正在考虑使用多个 ECS 任务来读取每个文件,并将 CSV 行作为对象插入到 DynamoDB 中,其中 customerId 定义为索引。处理完所有文件后,我可以启动其他一些 ECS 任务,通过索引的 customerId 从 DynamoDB 读取,以便进行聚合。

只是想看看有没有更好的方法?

【问题讨论】:

【参考方案1】:

使用 Amazon Athena。 它可以针对存储在 Amazon S3 中的文件(包括 CSV 文件)运行 SQL。

文件采用 Parquet 和 ORC 等列格式时效率最高,但 CSV 也可以。它甚至可以以 gzip 格式 读取它们,这也降低了成本,因为 Athena 定价基于从磁盘读取的数据量。

Athena 将读取存储在给定目录下的所有文件,因此从特定客户中选择数据或按客户、订单、项目等对所有数据进行排序相对简单.

您可以将 AWS Glue 爬虫指向数据,它可以自动确定格式和字段,创建表定义。然后,您可以简单地在 Athena 中运行 SQL。无需编程!

【讨论】:

【参考方案2】:

如何使用 AWS 数据管道将数据从 S3 提取到 dynomodb。

您可以做的是在接收到 S3 的对象上触发数据管道(您可以使用触发 S3 put 事件的 lambda 函数来实现)

试试这个

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBPipeline.html

这将删除您的 ECS 集群以进行数据摄取。

但要处理数据,您可以使用 ECS 集群。

【讨论】:

根据我的测试,我认为数据管道无法处理 gzip 格式的 CSV。 我认为你是对的,我们需要在 lamda 函数中执行一个额外的步骤来提取压缩文件并导入到 dynomoDB。谢谢指点。 您好只是想知道您是否有任何适用于数据管道的 CSV 样本。使用普通的 CSV,我仍然无法正常工作。必须将其转换为从 DDB 格式导出的。

以上是关于AWS 上的大 CSV 文件处理建议的主要内容,如果未能解决你的问题,请参考以下文章

如何安排python脚本在aws中按预定时间间隔运行

使用 AWS 处理 .csv 数据的最佳方式

使用AWS步骤函数处理大量数据?

使用 Data Pipeline 在 AWS 中进行批处理文件

如何处理来自 S3 的大文件并在 Spring Batch 中使用它

说说如何利用 Python 处理 CSV 文件