1. ホーム
  2. apache-spark

[解決済み] Spark - repartition() vs coalesce()

2022-03-15 19:33:56

質問

ラーニングスパークによる

データの再分割はかなり高価な操作であることに留意してください。 また、Sparkには、最適化されたバージョンの repartition() という coalesce() を使用すると、データ移動を回避することができますが、RDDパーティションの数を減らす場合のみです。

私が得た1つの違いは repartition() パーティションの数を増減させることができるのに対して coalesce() パーティション数は減らすことしかできません。

パーティションが複数のマシンに分散している場合や coalesce() を実行した場合、どのようにデータ移動を回避できるのでしょうか?

どのように解決するのですか?

を回避することができます。 フル シャッフルします。もし、パーティション数が減少していることが分かっていれば、実行者は安全に最小数のパーティションにデータを保持し、余分なノードから保持したノードにデータを移動させるだけです。

ということは、こんな感じでしょうか。

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は、移動するために元のデータを必要としなかったことに注意してください。