所以我有一个数据帧,可以将300 GB的记录输出到S3。 所有数据都在2K分区中进行分区。
.partitionBy("DataPartition", "PartitionYear", "PartitionStatement")
但问题是一些分区有非常庞大的数据(40GB),有些只有10MB。
因此,如果我再次像.repartition(100)
那样对其进行分区,那么它甚至会为10MB数据大小的分区创建许多文件,这会导致大量的输出文件。
当我尝试加载所有输出文件并运行我的火花作业时,由于许多小文件我的火花作业变得非常慢。
我正在寻找的是我们可以只重新划分那些没有大量记录的数据框。
为免我说我知道下面的分区(Japan 1970 BAL)
,记录会很大,所以我们只能重新分区吗?
我在互联网上没有发现任何相关信息。
我甚至试过这个
dfMainOutputFinalWithoutNull.repartition($"DataPartition", $"PartitionYear", $"PartitionStatement")
.write
.partitionBy("DataPartition", "PartitionYear")
但这也没有表现良好。
请提出建议,以便我的输出文件也不会变得非常庞大,我的工作也会更快。
这对我不起作用
val rddFirst = sc.textFile(mainFileURL)
val rdd = rddFirst.repartition(190)
因为当我尝试拆分文件名时,我会收到错误。