は、ここに私のデータフレームである(2.2をスパーク):dataset.countがシャッフルを引き起こすのはなぜですか?
根本的なRDDは、2つのパーティション
私はdf.countを行う
を持って、生産DAGは ですdf.rdd.countを実行すると、DAGは次のようになります。
QUES:Countがスパークでのアクションで、公式の定義は「データフレーム内の行数を返します。」。さて、私がデータフレーム上でカウントを実行すると、なぜシャッフルが起こっていますか?また、基本的なRDDで同じことをしてもシャッフルは起こりません。
なぜシャッフルが起こるのかはわかりません。私はここでカウントのソースコードを調べようとしましたspark githubしかし、それは完全に私に意味をなさない。 "groupby"はアクションの犯人に供給されていますか?
PS。 df.coalesce(1).countはシャッフルを起こさない
いくつかの意味があります。 rdd.countの場合はどうなりますか? rddに2つのパーティションがあるとします。 – bigdatamann
これらのRDDパーティションは、操作の瞬間に同じエグゼキュータ上にある可能性が最も高いです。私は、DFのメカニックを重視していましたが、RDDの詳細はわかりません。 RDDの実用的なことの1つは、データフレームを変換する必要がある場合や、あまり構造化されていないソースからデータフレームを作成する必要がある場合にのみ使用することです。構造化されたデータの処理では、データフレームの方が一般に高速です。 –
私は3つのパーティション化されたdfでテストを実行し、個々のパーティションカウントが1つのステージで計算されていることを確認してから、3つのパーティションを書き込むシャッフルが発生しました。次の段階では、これらの3つのパーティションを読み取り、それらを合計します。しかし、このようなことは意味をなさない。なぜなら、シャッフルは狭い依存変換+アクションのように見えるからだ。 – bigdatamann