PYSPARK-当在partitionby()之前使用repartition()将数据帧写入镶木地板文件时,性能降低的解决方案?

时间:2019-09-24 17:09:10

标签: apache-spark pyspark partition

我想将数据(包含在数据框中)写入镶木地板文件中。 我需要按两个变量对数据进行分区:“月”和“级别”。 (数据总是根据这两个变量进行过滤)

如果我执行以下操作 data.write.format("parquet").partitionBy("month", "level").save("...")我最终得到了预期的分区,但是每个分区都有很多文件。其中一些文件确实很小,这会损害对数据运行查询的性能。

为了解决这个问题,我尝试在写入数据之前应用repartitiondata.repartition("month", "level").write.format("parquet").partitionBy("month", "level").save("...")正是我想要的(每个分区1个文件,每个文件都有不错的大小)。

===>这里的问题是重新分区会导致数据的完全混洗,这意味着对于400Gb的输入数据,我最终会产生几Tb的混洗...

是否有任何方法可以在partitionby()之前优化repartition()或以其他任何方式做到这一点?

谢谢!

0 个答案:

没有答案