2016-04-11 15 views
1

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.

cevap

3

programming guide

Spark göre otomatik olarak her aşama içinde görevler gerekli ortak verileri yayınlar. Bu şekilde yayınlanan veriler serileştirilmiş biçimde önbelleğe alınır ve her bir görevi çalıştırmadan önce seri hale getirilir.

N kez aktarılmış ve (her bir aktif Python işlemi için bir defa) m kez seriden çıkarılabilir PySpark N çalışanlar ve m bölümleri değişken ayrı Interprètes olarak görevleri yerine yana gelmiştir. Yani PySpark'taki en yüksek bellek kullanımı kabaca size-of-serialized-structure + #python-processes * size-of-deserialized-structure olmalıdır.

+0

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

+0

Bu mükemmel bir anlam ifade ediyor. Teşekkür ederim. – Akavall

İlgili konular