使用Spark中的DataFrameWriter更改输出文件的数量

时间:2016-12-07 15:32:40

标签: apache-spark apache-spark-sql spark-dataframe

我有一个数据集,我使用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));

1 个答案:

答案 0 :(得分:2)

我的代码存在的问题是在repartition调用中指定了一个列。只需从repartition调用中删除该列即可解决问题。

每个partitionBy值的输出文件数量之间的关系与分区数量直接相关。假设您有256个不同的partitionBy值。如果您在作家之前进行repartition(5)调用,则每个partitionBy值最多会有5个输出文件。输出文件总数不会超过1280(尽管如果给定的partitionBy值没有太多数据,它可能会更少)。