私は労働者がRDDを作成する方法を知りたいと思います。このマップ/ RDDは小さく、私はこのRDDを1台のマシン/エグゼキュータに完全に置いておきたい(私はパーティション分割(1)がこれを達成できると思う)。さらに、私はローカルExecutor上でこのMap/RDDをキャッシュし、ルックアップのためにこのExecutor上で実行されているタスクで使用できるようにしたい。スパークストリーミングでは、私は労働者にRDDを作成することができます
どうすればいいですか?
私は労働者がRDDを作成する方法を知りたいと思います。このマップ/ RDDは小さく、私はこのRDDを1台のマシン/エグゼキュータに完全に置いておきたい(私はパーティション分割(1)がこれを達成できると思う)。さらに、私はローカルExecutor上でこのMap/RDDをキャッシュし、ルックアップのためにこのExecutor上で実行されているタスクで使用できるようにしたい。スパークストリーミングでは、私は労働者にRDDを作成することができます
どうすればいいですか?
ドライバプログラムでsc.parallelize(data)
を使用してRDDを作成できます。マップを格納するために、キーと値の2つの部分に分割し、2つの別々の列としてRDD/Dataframeに格納することができます。
いいえ、ワーカーノードにRDDを作成することはできません。ドライバのみがRDDを作成できます。
ブロードキャスト変数は、あなたの状況を解決するものと思われます。すべての労働者にデータを送信しますが、地図が小さければ問題はありません。
RDDが配置されるパーティションを制御することはできませんので、再パーティション化(1) - このRDDが同じノードに配置されるかどうかわかりません;)ブロードキャスト変数はすべてのノードにありますので、検索は非常に高速になります
この情報をありがとう。私の地図はしばらくの間変わります。このMap/Broadcast変数を更新し、それをすべてのエグゼキュータに再ブロードキャストすることは可能ですか?私はこれに関するいくつかの情報をhttps://gist.github.com/BenFradet/c47c5c7247c5d5d0f076で見つけました。それは有効/有効ですか? – sunillp
いいえ、ブロードキャスト変数は変更しないでください。ブロードキャストされたデータを更新する方法は、AccumulatorV2の独自の実装を作成するのではなく、マップの追加状態が保持されます。 –
あなたはこれを行うには簡単ではありません。それはスパークが専門とするところではない。ローカルルックアップなどを行う。 –