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



我有一个我使用dataFrameWriter写入S3的数据集。我使用的是Parquet,还可以在具有256个不同值的列上进行分区呼叫。它运行良好,但需要一些时间才能将数据集写出(并阅读到其他作业中)。在调试中,我注意到,尽管我的repartition调用指定了256个分区,但作者仅输出256个文件,每个后缀一个文件。有没有办法增加每个分区值输出的文件数量?

我的代码看起来像:

myDS = myDS.repartition(256, functions.col("suffix"));
myDS.write().partitionBy("suffix").parquet(String.format(this.outputPath, "parquet", this.date));

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

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

相关内容

  • 没有找到相关文章