如何在 spark 中使用 repartition() 指定文件大小

How to specify file size using repartition() in spark

我正在使用 pyspark,我有一个大型数据源,我想重新分区并明确指定每个分区的文件大小。

我知道使用 repartition(500) 函数会将我的 parquet 分割成 500 个大小几乎相等的文件。 问题是每天都有新数据添加到该数据源中。在某些日子里可能会有很大的输入,而在某些日子里可能会有较小的输入。因此,当查看一段时间内的分区文件大小分布时,每个文件在 200KB700KB 之间变化。

我正在考虑指定每个分区的最大大小,这样无论文件数量多少,我每天每个文件的文件大小大致相同。 这将在我稍后 运行 我在这个大型数据集上的工作时帮助我避免执行时间和随机时间等的偏差

有没有办法使用 repartition() 函数或在将数据帧写入 parquet 时指定它?

你可以考虑用参数 maxRecordsPerFile.

来写你的结果
storage_location = //...
estimated_records_with_desired_size = 2000
result_df.write.option(
     "maxRecordsPerFile", 
     estimated_records_with_desired_size) \
     .parquet(storage_location, compression="snappy")