2016-08-01 1 views
2

したがって、このスタックオーバーフローポストに基づいてシャッフルを引き起こすSpark操作についてテストしようとしました:LINK。しかし、cartesian操作でSparkでのシャッフルが発生しない場合は、パーティションをネットワーク上で移動してローカルに配置する必要があるため、意味がありません。スパークデカルトはシャッフルを引き起こしませんか?

Sparkは実際にそのシーンの背後でcartesiandistinctの操作をどのように実行しますか?

答えて

2

シャッフルは、キーと値のペア(RDD[(T, U)]と一般的にはPairRDDsまたはPairwiseRDDsと記載されています)のRDDに固有の操作であり、Hadoopのシャッフルフェーズとほぼ同等です。シャッフルの目的は、キー値とPartitionerに基づいて、特定のエグゼキュータにデータを移動することです。

Sparkではネットワークトラフィックが必要ですが、シャッフルと同じタイプのロジックを使用せず、必ずしもキーと値のペアを必要とするわけではありません。デカルト積はこれらの操作の1つです。これはマシン間でデータを移動させますが(実際ははるかに高価なデータ移動を引き起こします)、キーとエグゼキュータの関係は確立されません。

+0

どのような操作がSparkでネットワークトラフィックを必要とするのかをどのように知ることができますか?あなたが言及したように、 'デカルト'は実際にはデータの動きに基づいて高価な操作です。したがって、私たちが回避するために、他の操作がこのような振る舞いを持っているかどうかを知る方が良いでしょう。 – Tim

+1

操作が 'mapPartitions'(' map'、 'filter'など)だけで表現されている場合、データの移動は必要ありません。そうでなければ、おそらく他の方法でデータを移動します。 – zero323

+1

公式スパークの詳細情報 http://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations – DanielVL

関連する問題