猿问

Spark - repartition()vs coalesce()

Spark - repartition()vs coalesce()

根据Learning Spark的说法

请记住,重新分区数据是一项相当昂贵的操作。Spark还有一个优化版本的repartition(),称为coalesce(),它允许避免数据移动,但前提是你减少了RDD分区的数量。

我得到的一个区别是,使用repartition()可以增加/减少分区数量,但是使用coalesce()时,只能减少分区数量。

如果分区分布在多台机器上并运行coalesce(),它如何避免数据移动?


慕的地8271018
浏览 903回答 3
3回答

茅侃侃

它避免了完全洗牌。如果已知数量正在减少,则执行程序可以安全地将数据保存在最小数量的分区上,仅将数据从额外节点移出到我们保留的节点上。所以,它会是这样的:Node 1 = 1,2,3Node 2 = 4,5,6Node 3 = 7,8,9Node 4 = 10,11,12然后coalesce下至2个分区:Node 1 = 1,2,3 + (10,11,12)Node 3 = 7,8,9 + (4,5,6)请注意,节点1和节点3不需要移动其原始数据。
随时随地看视频慕课网APP
我要回答