假設我有大的rdd
,我想應用使用全局函數。我的問題是:全球複製了多少次。將全局變量複製(在RAM中)到每個工人的每個處理器上嗎?
比方說,我有一個驅動程序節點和2個工人節點,其中每個工人有4個處理器。將全局變量複製(在RAM中)8次(對於每個工作節點上的每個處理器)? 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中,並且每個任務都會在worker上發生4次。所以共享變量將被存儲在RAM上4次的工作人員?這是我的理解,是錯的? – Akavall
這很有道理。謝謝。 – Akavall