2017-01-11 4 views
1

私はSOのように火花ドキュメントおよびその他の関連するQ &を読んだが、私はまだスパーク放送変数、太字では特に、ステートメントのいくつかの詳細については不明だ:スパーク放送の不利な点は何ですか?

スパークアクションを介して実行されています分散シャッフル操作で区切られた一連のステージ。 Sparkは、各ステージ内のタスクに必要な共通データを自動的にブロードキャストします。この方法でブロードキャストされたデータは、シリアル化された形式でキャッシュされ、各タスクを実行する前にデシリアライズされます。つまり、ブロードキャスト変数を明示的に作成するは、複数のステージにわたるタスクが同じデータを必要とする場合、または非直列化形式でデータをキャッシュする場合に重要です

  1. 「共通データ」とは何ですか?
  2. 変数が1段階でのみ使用されている場合、ブロードキャストはそのメモリフットプリントに関係なく有用ではありませんか?
  3. ブロードキャストは効果的に各エグゼキュータの変数を「参照」するため、複数回コピーするのではなく、どのシナリオで放送が悪い考えですか?なぜこの放送の振る舞いがデフォルトのスパークの振る舞いではないのですか?

ありがとうございました!

答えて

1

あなたの質問には、ほとんどすべての回答があります。

「共通データ」とは何ですか?

複数のエグゼキュータによって参照/読み込まれるデータ。たとえば、辞書ルックアップです。何人かの巨大な辞書検索が必要なタスクを100人のエグゼキュータが実行していると仮定します。ブロードキャスト変数がなければ、すべてのエグゼキュータでこのデータをロードします。ブロードキャスト変数では、一度ロードするだけですべてのエグゼキュータが同じ辞書を参照します。したがって、多くのスペースを節約できます。詳細については

:変数のみ1つの段階で使用されている場合https://blog.knoldus.com/2016/04/30/broadcast-variables-in-spark-how-and-when-to-use-them/

、それは関係なく、そのメモリフットプリントの、有用ではありません放送意味するのでしょうか?

いいえはい。いいえ、あなたのシングルステージに数百人から数千人のエグゼクティブがいれば!はい、あなたがステージにいれば、エグゼキュータはほとんどありません。

ブロードキャストは効果的に各エグゼキュータの変数を「参照」するため、何回シナリオをブロードキャストするのが悪い考えですか?なぜこの放送の振る舞いがデフォルトのスパークの振る舞いではないのですか?

このようにブロードキャストされたデータは、シリアル化された形式でキャッシュされ、各タスクを実行する前にデシリアライズされます。したがって、ブロードキャストされるデータが非常に大きい場合、シリアライゼーションとデシリアライズはコストのかかる操作になります。このような場合は、ブロードキャスト変数の使用を避ける必要があります。

+0

私は放送しても、変数はエグゼキュータごとにシリアライズしてデシリアライズする必要があります(ただし、各エグゼキュータ内のタスク間で共有されます)。Q1については、リスト/マップ/セットを持っていれば自動的にブロードキャストされるのかどうか、私の質問はどのような種類/種類のデータが「自動的に」ブロードキャストされるのでしょうか?私はカスタムオブジェクトを持っている場合(シリアル化可能と仮定して) – newway

+0

私はあなたの最初の質問を誤解しました。私はあなたの質問への答えを持っている参照を追加しました。 – code

+0

'私は放送であっても、実行者ごとにシリアル化してデシリアライズする必要がありますが(各エグゼキュータ内のタスク間で共有されます)、ブロードキャスト変数のドキュメントは明示的にブロードキャスト変数を作成することは、複数のステージ間で同じデータが必要な場合や、デシリアライズされた形式でデータをキャッシュすることが重要な場合 – code

関連する問題