AWS GLUE - 如何从 RDS 表读取数据并将数据作为 csv 文件复制到 S3 存储桶

AWS GLUE - How to read data from RDS table and copy to S3 bucket as csv file

提问人:Saranya 提问时间:11/17/2023 最后编辑:Saranya 更新时间:11/20/2023 访问量:30

问:

AWS 胶水对我来说是新的。 我正在使用 AWS Glue,我正在尝试从 RDS 数据库表中读取数据并将数据作为单个 csv 文件写入 s2 存储桶。我在 Glue 控制台中使用 Visual ETL 设置了一个 AWS Glue 作业,选择源作为关系数据库,选择目标作为带有表的 S3 存储桶(我为架构创建了一个爬网程序)。作业成功,但我注意到我在目标 s3 存储桶位置获得了 10 个单独的文件。有没有人知道如何以我在 s3 存储桶中只获得一个合并文件的方式实现这一目标。

网络服务 亚马逊 -S3 AWS-胶水

评论

0赞 Tomasz Breś 11/18/2023
它是什么类型的 Glue 作业(Apache Spark、Python shell)?
0赞 Tomasz Breś 11/18/2023
您为作业配置了多少个 Worker?
0赞 Saranya 11/19/2023
@Tomasz Breś 它的蟒蛇。该作业有一个RDS SQL Server表的源、一个更改架构转换和一个目标。

答:

0赞 Tomasz Breś 11/19/2023 #1

每个 Glue 作业在多个实例上并行执行。

您的问题很可能与默认的 Glue Job 工作人员数量(10 人)有关。

您必须在胶水作业代码中实现输出合并操作。

检查一下:

AWS Glue 作业:如何在 S3 中合并多个输出 .csv 文件

1赞 Oleksandr Lykhonosov 11/20/2023 #2

当您使用 AWS Glue 时,很高兴知道 Glue 在后台与 Spark 配合使用。Spark 通常会将数据分散到多个文件中,以加快速度,这对于大型数据集非常有用。但有时,您最终会得到很多文件。

要解决此问题,您可以使用 Glue 作业脚本中的合并功能来减少分区数并将数据合并到单个文件中。下面是一个简单的示例:

# put all the data into just one file
df.coalesce(1).write...

但要小心:使用可能会减慢速度,尤其是在处理大量数据时,因为它涉及将数据洗牌到单个分区,从而可能影响性能。因此,这有点像在获取一个文件和保持快速发展之间找到平衡,具体取决于您拥有的数据量以及您需要对其进行的处理。coalesce

Spark - repartition() 与 coalesce()