首页 > 解决方案 > 如何根据 AWS Glue 作业中数据帧的不同值写入多个 S3 存储桶?

问题描述

我有一个带有account_id列的数据框。我想将所有不同的account_id行分组并写入不同的 S3 存储桶。account_id为给定 S3 存储桶中的每个文件写入一个新文件夹也可以。

标签: amazon-web-servicesamazon-s3aws-glueaws-glue-spark

解决方案


如果您希望所有类似的 account_id 都出现在一个文件夹中,那么您可以通过partitionBy函数实现它。下面是一个示例,它将所有 account_id 分组并以 parquet 格式将它们写入不同的文件夹。您可以根据用例更改模式。

df.write.mode("overwrite").partitionBy('account_id').parquet('s3://mybucket/')

如果您想要多个分区,则可以通过将列添加到 partitionBy 函数来实现。例如,假设您有一个包含格式值的日期列,yyyy/mm/dd那么下面的代码片段将再次在其中创建account_id具有多个日期的文件夹。

df.write.mode("overwrite").partitionBy('account_id','date').parquet('s3://mybucket/')

将以以下格式将文件写入 S3:

s3://mybucket/account_id=somevalue/date=2020/11/01
s3://mybucket/account_id=somevalue/date=2020/11/02
s3://mybucket/account_id=somevalue/date=2020/11/03
......
s3://mybucket/account_id=somevalue/date=2020/11/30

推荐阅读