我有一个我使用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(尽管如果一个给定的分区值没有太多数据,则可能会少)。