Apache spark 如何通过列值组合对S3输出文件进行分区?
我有数据,我正在爬进AWS胶水。在那里,我使用PySpark并将其转换为拼花地板格式。我的原始数据是CSV,如下所示:Apache spark 如何通过列值组合对S3输出文件进行分区?,apache-spark,amazon-s3,pyspark,aws-glue,Apache Spark,Amazon S3,Pyspark,Aws Glue,我有数据,我正在爬进AWS胶水。在那里,我使用PySpark并将其转换为拼花地板格式。我的原始数据是CSV,如下所示: id、日期、数据1、202003、x2、202003、y1、202004、z 等等 我能够成功地转换数据,但我不确定获得所需输出的最佳方法。输出应该在S3中按id和日期分割。因此,它应该有如下内容: s3://bucket/outputdata/{id}{date}/{data}.parquet 其中id和date是数据中的实际id和日期值。其中文件的名称显然无关紧要,我只想能
id、日期、数据1、202003、x2、202003、y1、202004、z
等等
我能够成功地转换数据,但我不确定获得所需输出的最佳方法。输出应该在S3中按id和日期分割。因此,它应该有如下内容:
s3://bucket/outputdata/{id}{date}/{data}.parquet
其中id
和date
是数据中的实际id和日期值。其中文件的名称显然无关紧要,我只想能够在S3对象前缀中创建“文件夹”,并在其中分割数据
我对AWS胶水非常陌生,我有一种感觉,我错过了一些非常明显的东西
提前感谢。您可以通过连接两个现有列,然后在写入时按新列进行分区来创建分区列,例如
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')
谢谢我会给它一个尝试,如果它的工作,我会标记正确。