Diyelim ki büyük rdd
var ve global kullanan işlevi uygulamak istiyorum. Sorum şu: Küresel kaç kez kopyalanıyor.Genel değişken, her bir çalışanın her bir işlemcisine (RAM içinde) kopyalanır mı?
Her çalışanın 4 işlemciye sahip olduğu bir sürücü düğümü ve 2 çalışan düğümüm olduğunu varsayalım. Global değişken 8 kez (her bir çalışan düğümü üzerindeki her işlemci için) kopyalanabilir mi? Rdd'nin sahip olduğu bölümlerin sayısı uygun değildir (8'den az olmamak kaydıyla), doğru mu? Başka bir deyişle, global/paylaşılan veri yapmam 100 MB'lık RAM alırsa, bir çalışanın 4 işlemcisi varsa, belirli bir çalışan üzerinde 400 MB'lık bir RAM alırdı, değil mi? Ben muhtemelen burada broadcast
kullanması gerektiğini biliyorum ama ben durumunda ne olup bittiğini anlamalarına emin olmak için çalışıyorum
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
:
ardından
ne bahsediyorum bir sözde codish örnektir globaller.
Cevabınız için teşekkür ederim, ancak hala tam olarak anlamadım. Bir işçi düğümünün 4 çekirdeği varsa, bu görevde 4 görev çalıştırılacaktır. Bir nesne serileştirildikten sonra RAM'de basılır ve bu her görev için işçi üzerinde 4 kez olur. Öyleyse paylaşılan değişken işçiye 4 kez RAM'de saklanacak mı? Bu benim anlayışım, yanlış mı? – Akavall
Bu mükemmel bir anlam ifade ediyor. Teşekkür ederim. – Akavall