如何通过列值的组合对 S3 输出文件进行分区?
How to partition S3 output files by a combination of column values?
我有正在爬取到 AWS Glue 中的数据。我在那里使用 PySpark 并将其转换为 Parquet 格式。我的原始数据是 CSV,看起来像这样:
id, date, data 1, 202003, x 2, 202003, y 1, 202004, z
等...
我能够成功转换数据,但我不确定获得所需输出的最佳方式。输出应在 S3 中按 ID 和日期拆分。所以它应该是这样的:
s3://bucket/outputdata/{id}_{date}/{data}.parquet
其中 id
和 date
是数据中的实际 id 和 date 值。其中的文件名显然无关紧要,我只想能够在 S3 对象前缀中创建“文件夹”并拆分其中的数据。
我是 AWS Glue 的新手,我感觉我遗漏了一些非常明显的东西。
提前致谢。
您可以通过连接两个现有列来创建分区列,然后在写入时按新列进行分区,例如
from pyspark.sql.functions import concat, col, lit
df1 = df.withColumn('p', concat(col('id'), lit('_'), col('date')))
df1.write.partitionBy('p').parquet('s3://bucket/outputdata')
我有正在爬取到 AWS Glue 中的数据。我在那里使用 PySpark 并将其转换为 Parquet 格式。我的原始数据是 CSV,看起来像这样:
id, date, data 1, 202003, x 2, 202003, y 1, 202004, z
等...
我能够成功转换数据,但我不确定获得所需输出的最佳方式。输出应在 S3 中按 ID 和日期拆分。所以它应该是这样的:
s3://bucket/outputdata/{id}_{date}/{data}.parquet
其中 id
和 date
是数据中的实际 id 和 date 值。其中的文件名显然无关紧要,我只想能够在 S3 对象前缀中创建“文件夹”并拆分其中的数据。
我是 AWS Glue 的新手,我感觉我遗漏了一些非常明显的东西。
提前致谢。
您可以通过连接两个现有列来创建分区列,然后在写入时按新列进行分区,例如
from pyspark.sql.functions import concat, col, lit
df1 = df.withColumn('p', concat(col('id'), lit('_'), col('date')))
df1.write.partitionBy('p').parquet('s3://bucket/outputdata')