如何处理spark

时间:2018-03-21 10:56:34

标签: apache-spark spark-dataframe hadoop2 hadoop-partitioning

所以我有一个数据帧,可以将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)

因为当我尝试拆分文件名时,我会收到错误。

0 个答案:

没有答案