大きなrdd
があり、グローバルを使用する関数を適用したいとします。私の質問は、何回グローバルがコピーされるかです。グローバル変数は、各ワーカーの各プロセッサに(RAMで)コピーできますか?
ドライバノードと2つのワーカーノードがあり、各ワーカーには4つのプロセッサがあるとします。グローバル変数は(各ワーカー・ノードの各プロセッサーごとに)8回(RAMで)コピーされますか? rddが持つパーティションの数は関係ありません(8以上でなければなりません)。
つまり、私のグローバル/共有データ構造が100 MBのRAMを占める場合、ワーカーに4つのプロセッサがある場合は、特定のワーカーで400 MBのRAMを占有するでしょうか?続き
は、私が何を言っているかの疑似codish例です。
from pyspark import SparkContext
sc = SparkContext(appName="myApp)
my_dict = {"a": 1, "b": 2, "c": 3, "d": 4} # at no point will be modified
def my_func(letter):
return my_dict[letter]
my_list_rdd = # Make my rdd
result = my_list_rdd.map(lambda x: my_func(x))
# do something with result
私はおそらくここbroadcast
を使用する必要があることを知っているが、私は私がした場合に何が起こっているか理解していることを確認しようとしていますグローバル。
あなたの答えをありがとうが、私はまだ完全に理解していません。ワーカーノードに4つのコアがある場合、そのワーカーで4つのタスクが実行されます。オブジェクトがデシリアライズされた後、RAMにストロークされます。これは、各タスクに対してワーカーで4回発生します。共有変数はワーカーに4回RAMに保存されますか?それは私の理解です、それは間違っていますか? – Akavall
それは完璧な意味合いがあります。ありがとうございました。 – Akavall