Learning Sparkによると
データの再パーティション化はかなりコストのかかる操作であることに留意してください。Spark には、データの移動を回避できる最適化されたバージョンのと
repartition()
呼ばれる機能もありますcoalesce()
が、これは RDD パーティションの数を減らす場合に限られます。
私が理解している違いの 1 つは、repartition()
パーティションの数を増減できるのに対し、coalesce()
パーティションの数を減らすことしかできないことです。
パーティションが複数のマシンに分散してcoalesce()
実行されている場合、データの移動を回避するにはどうすればよいですか?
ベストアンサー1
完全なシャッフルを回避します。数が減少することが分かっている場合、エグゼキュータは最小限の数のパーティションにデータを安全に保持し、余分なノードから保持したノードにデータを移動するだけです。
つまり、次のようになります。
Node 1 = 1,2,3
Node 2 = 4,5,6
Node 3 = 7,8,9
Node 4 = 10,11,12
次に、coalesce
2 つのパーティションに分けます。
Node 1 = 1,2,3 + (10,11,12)
Node 3 = 7,8,9 + (4,5,6)
ノード 1 とノード 3 では元のデータを移動する必要がないことに注意してください。