2016-05-17 5 views
1

私はいくつかのパーティション化戦略、特に2つのRDDSを共同してパーティション化し、それらを結合し、それらに対してreduce操作を呼び出すことによってPySparkコードを最適化しようとしています(それより複雑ですが、モデル)。中の図を見るとスパーク・ジョインが効率的な共用入力ジョインであることをどのように知ることができますか?

img http://reactivesoftware.pl/spark/img/rdd_dependency.png

共同パーティションは、非常に効率的かつスキニーで参加します。私の質問は、私のjoin/reduceが正しく分割されていることをどのように知っているのですか? SparkアプリケーションのUIにはどのような統計情報が必要ですか?どのようなパフォーマンスの改善が見込まれますか?データが適切にスパークで共分割されていない場合は、システムはシャッフルを実行するために持っている

答えて

3

(すなわち、変換を実行するために必要な参加を作成するために、新しい一時パーティションにデータを移動します。)

だから、キー両者の違いはシャッフルの読み書き時間です。つまり、狭い依存関係の場合は最小の読み込みとゼロ書き込みが必要ですが、広い依存関係の場合は大きなシャッフル書き込みがあります。 Spark UIのステージの詳細でシャッフルの読み込みと書き込みの統計を表示できます。

あなたは本当に広い依存関係を排除から2つのパフォーマンスの向上を参照してください。

    自体が重要なIOおよびネットワークリソースを取るシャッフル
  • ワイドな依存関係を持つことにより、シャッフル操作はしばしば下流の他の操作のボトルネックになります。

明確化のポイント:データを集約するために操作を常にシャッフルするので、パーティション化戦略は結合にのみ適用されます。

+0

ありがとう、あなたのコメント> "あなたは最小限の読み込みとゼロの書き込みを見なければなりません"私が探していたものです。あなたの最後のポイントは、rddがすでに分割されている場合、reduceByKeyは単なるローカルなリダクションであり、シャッフルは含まれません。 –

+0

@Camパーティションに特定のキーのデータセットが含まれている場合はyesですが、十分に大きなSparkデータセットの場合は、複数のパーティションにわたって1つのキーの値を分割します(つまり、キー "A"パーティション1,2、および3)を使用して、いくつかの並列性の利点を得ることができます。 –

関連する問題