按列值将动态帧输出拆分到s3

w8f9ii69  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(314)

我有数据,我爬进了aws胶水。在那里,我使用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和日期。里面的文件名显然无关紧要,我只想能够在对象前缀中创建“文件夹”并拆分其中的数据。
我对aws胶水非常陌生,我有一种感觉,我错过了一些非常明显的东西。
提前谢谢。

bpzcxfmw

bpzcxfmw1#

您可以通过连接两个现有列,然后在写入时按新列进行分区来创建分区列。

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')

相关问题