我有一个数据集,我使用DataFrameWriter写入S3。我正在使用Parquet并且还在具有256个不同值的列上执行partitionBy调用。它运行良好,但需要一些时间来编写数据集(并读取其他工作)。在调试中,我注意到编写器只输出256个文件,每个后缀一个,尽管我的repartition
调用指定了256个分区。有没有办法增加每个partitionBy值的文件输出数量?
我的代码如下:
myDS = myDS.repartition(256, functions.col("suffix"));
myDS.write().partitionBy("suffix").parquet(String.format(this.outputPath, "parquet", this.date));
答案 0 :(得分:2)
我的代码存在的问题是在repartition
调用中指定了一个列。只需从repartition
调用中删除该列即可解决问题。
每个partitionBy
值的输出文件数量之间的关系与分区数量直接相关。假设您有256个不同的partitionBy
值。如果您在作家之前进行repartition(5)
调用,则每个partitionBy
值最多会有5个输出文件。输出文件总数不会超过1280(尽管如果给定的partitionBy值没有太多数据,它可能会更少)。