SPARK:了解合并方法?
SPARK: Understanding coalesce method?
我正在尝试了解 spark 中的合并方法。
我有一个JavaRDD<String>
(由16310个字符串组成),我想将它保存在233个文件中。 (一个文件有 70 个字符串)
首先,我用 trainDataFeatures.repartition(233).saveAsTextFile(outputPathTrainFeatures);
试了一下
这很好用,但我不想打乱我的数据。所以我尝试了:trainDataFeatures.coalesce(233, false).saveAsTextFile(outputPathTrainFeatures);
这里我只有 4 个输出文件。没有洗牌,但只有 4 个!!!这真的很烦人。也许有人可以帮我解决这个问题。
我认为这是 coalesce
和 repartition
的重点,也是最大的区别。
Repartition 会对数据进行全面洗牌,以便能够创建这些额外的分区。合并在现有分区之间移动数据并避免创建新分区并避免完整的数据随机播放。
基本上,coalesce 不会为您创建额外的分区这一事实是 coalesce 的一个特性。
与重新分区相同 - 由于完整的数据混洗,它能够以高效的方式工作。您可能不关心性能,只想增加分区数量而不进行随机播放 - 好吧,之前有人有过这个想法并且 this issue here 仍然开放。
我正在尝试了解 spark 中的合并方法。
我有一个JavaRDD<String>
(由16310个字符串组成),我想将它保存在233个文件中。 (一个文件有 70 个字符串)
首先,我用 trainDataFeatures.repartition(233).saveAsTextFile(outputPathTrainFeatures);
这很好用,但我不想打乱我的数据。所以我尝试了:trainDataFeatures.coalesce(233, false).saveAsTextFile(outputPathTrainFeatures);
这里我只有 4 个输出文件。没有洗牌,但只有 4 个!!!这真的很烦人。也许有人可以帮我解决这个问题。
我认为这是 coalesce
和 repartition
的重点,也是最大的区别。
Repartition 会对数据进行全面洗牌,以便能够创建这些额外的分区。合并在现有分区之间移动数据并避免创建新分区并避免完整的数据随机播放。
基本上,coalesce 不会为您创建额外的分区这一事实是 coalesce 的一个特性。
与重新分区相同 - 由于完整的数据混洗,它能够以高效的方式工作。您可能不关心性能,只想增加分区数量而不进行随机播放 - 好吧,之前有人有过这个想法并且 this issue here 仍然开放。