Spark - repartition()vs coalesce()根据Learning Spark的说法请记住,重新分区数据是一项相当昂贵的操作。Spark还有一个优化版本的repartition(),称为coalesce(),它允许避免数据移动,但前提是你减少了RDD分区的数量。我得到的一个区别是,使用repartition()可以增加/减少分区数量,但是使用coalesce()时,只能减少分区数量。如果分区分布在多台机器上并运行coalesce(),它如何避免数据移动?
3 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
它避免了完全洗牌。如果已知数量正在减少,则执行程序可以安全地将数据保存在最小数量的分区上,仅将数据从额外节点移出到我们保留的节点上。
所以,它会是这样的:
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不需要移动其原始数据。
添加回答
举报
0/150
提交
取消