したがって、このスタックオーバーフローポストに基づいてシャッフルを引き起こすSpark操作についてテストしようとしました:LINK。しかし、cartesian
操作でSparkでのシャッフルが発生しない場合は、パーティションをネットワーク上で移動してローカルに配置する必要があるため、意味がありません。スパークデカルトはシャッフルを引き起こしませんか?
Sparkは実際にそのシーンの背後でcartesian
とdistinct
の操作をどのように実行しますか?
したがって、このスタックオーバーフローポストに基づいてシャッフルを引き起こすSpark操作についてテストしようとしました:LINK。しかし、cartesian
操作でSparkでのシャッフルが発生しない場合は、パーティションをネットワーク上で移動してローカルに配置する必要があるため、意味がありません。スパークデカルトはシャッフルを引き起こしませんか?
Sparkは実際にそのシーンの背後でcartesian
とdistinct
の操作をどのように実行しますか?
シャッフルは、キーと値のペア(RDD[(T, U)]
と一般的にはPairRDDs
またはPairwiseRDDs
と記載されています)のRDDに固有の操作であり、Hadoopのシャッフルフェーズとほぼ同等です。シャッフルの目的は、キー値とPartitioner
に基づいて、特定のエグゼキュータにデータを移動することです。
Sparkではネットワークトラフィックが必要ですが、シャッフルと同じタイプのロジックを使用せず、必ずしもキーと値のペアを必要とするわけではありません。デカルト積はこれらの操作の1つです。これはマシン間でデータを移動させますが(実際ははるかに高価なデータ移動を引き起こします)、キーとエグゼキュータの関係は確立されません。
どのような操作がSparkでネットワークトラフィックを必要とするのかをどのように知ることができますか?あなたが言及したように、 'デカルト'は実際にはデータの動きに基づいて高価な操作です。したがって、私たちが回避するために、他の操作がこのような振る舞いを持っているかどうかを知る方が良いでしょう。 – Tim
操作が 'mapPartitions'(' map'、 'filter'など)だけで表現されている場合、データの移動は必要ありません。そうでなければ、おそらく他の方法でデータを移動します。 – zero323
公式スパークの詳細情報 http://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations – DanielVL