私はブロードキャストする一連の大きな変数を持っています。これらの変数は、クラスタ化されたデータベースからロードされます。ワーカー・ノード間でデータベースから負荷を分散し、後でマップ操作のために各ノードにすべてのノードに特定の変数をブロードキャストさせることは可能ですか?Sparkワーカー・ノードは変数をブロードキャストできますか?
ありがとうございます!
私はブロードキャストする一連の大きな変数を持っています。これらの変数は、クラスタ化されたデータベースからロードされます。ワーカー・ノード間でデータベースから負荷を分散し、後でマップ操作のために各ノードにすべてのノードに特定の変数をブロードキャストさせることは可能ですか?Sparkワーカー・ノードは変数をブロードキャストできますか?
ありがとうございます!
ですので、答えはそうではありません。
sc.broadcast(someRDD)を呼び出すとエラーが発生します。最初にドライバに戻す必要があります。
ブロードキャスト変数は一般的にはワーカーに渡されますが、私はPythonで同様のケースで何をしたかを教えてくれます。
行の総数が分かっている場合は、その長さのRDDを作成してマップ操作を実行してください(ワーカーに配布されます)。地図では、ワーカーはデータを取得するための関数を実行しています(どのようにしてそれらがすべて異なるデータを取得するかはわかりません)。
各ワーカーは、通話を行うことによって必要なデータを取得します。その後、collectAsMap()を実行して辞書を取得し、それをすべてのワーカーにブロードキャストできます。
ただし、各従業員にクライアント依頼を行うすべてのソフトウェア依存が必要であることに注意してください。また、ソケットの使用を念頭に置いておく必要があります。 API照会と似たようなことをやっただけで、ソケットの増加は見られませんでしたが、通常のHTTPリクエストを行っていました。わかりません....
各ワーカーが一意のサブセットのみを取得することを保証するために、データベースからのデータのパーティション関数を作成するのは非常に簡単です。それはちょうど1つのドライバプロセスのシングルスレッドがデータベースからすべてのデータをプルするだけで、クラスタにデータをブロードキャストするのは愚かなようです。なぜクラスタを動作させないのですか? – ThatDataGuy