2016-09-27 9 views
0

私は労働者がRDDを作成する方法を知りたいと思います。このマップ/ RDDは小さく、私はこのRDDを1台のマシン/エグゼキュータに完全に置いておきたい(私はパーティション分割(1)がこれを達成できると思う)。さらに、私はローカルExecutor上でこのMap/RDDをキャッシュし、ルックアップのためにこのExecutor上で実行されているタスクで使用できるようにしたい。スパークストリーミングでは、私は労働者にRDDを作成することができます

どうすればいいですか?

+0

あなたはこれを行うには簡単ではありません。それはスパークが専門とするところではない。ローカルルックアップなどを行う。 –

答えて

0

ドライバプログラムsc.parallelize(data)を使用してRDDを作成できます。マップを格納するために、キーと値の2つの部分に分割し、2つの別々の列としてRDD/Dataframeに格納することができます。

0

いいえ、ワーカーノードにRDDを作成することはできません。ドライバのみがRDDを作成できます。

ブロードキャスト変数は、あなたの状況を解決するものと思われます。すべての労働者にデータを送信しますが、地図が小さければ問題はありません。

RDDが配置されるパーティションを制御することはできませんので、再パーティション化(1) - このRDDが同じノードに配置されるかどうかわかりません;)ブロードキャスト変数はすべてのノードにありますので、検索は非常に高速になります

+0

この情報をありがとう。私の地図はしばらくの間変わります。このMap/Broadcast変数を更新し、それをすべてのエグゼキュータに再ブロードキャストすることは可能ですか?私はこれに関するいくつかの情報をhttps://gist.github.com/BenFradet/c47c5c7247c5d5d0f076で見つけました。それは有効/有効ですか? – sunillp

+0

いいえ、ブロードキャスト変数は変更しないでください。ブロードキャストされたデータを更新する方法は、AccumulatorV2の独自の実装を作成するのではなく、マップの追加状態が保持されます。 –

関連する問題