değişken dış değişiklikleri inat, ben mesela yapabilirsiniz:pyspark python'da mapper kapsamı
lRet = []
llData = [range(3) for i in range(5)]
def func(l):
lRet.append(l[0])
return l
map(func, llData)
print(lRet)
-> [0, 0, 0, 0, 0]
Şimdi, PySpark
benzer bir şey yapmak istiyorum. Nedeni, RDD'mdeki harici bir şeyi, rdd'mdeki verilerden oluşturmam gerektiğidir. aynı şeyi Sağlar:
lRet = []
#rddData.collect() is of form llData above
def func(l):
lRet.append(l[0])
return l
rddData.map(func).collect()
print lRet
-> []
Ben de sadece yerel pyspark örneğinde bir import pdb; pdb.set_trace()
ilk örneği yapıyor lRet
dahili olarak lRet
izler rağmen değişmeden olmanın aynı sonucu verdiğini fark etmiş.
Herhangi bir fikrin var mı?
'lRet 'oluşturduğunuzda, yalnızca ekliyor/ekliyor musunuz? Ekledikçe/eklediğinizde sipariş önemlidir mi? –
@KatyaHandler Peki, gerçek hayatta seyrek bir matrise okumak/yazmak istiyorum. Kavramın aynı olması gerektiğini düşündüm, bu yüzden çok daha basit bir örnek kod oluşturdum. Sorunuza: Söz konusu matrise erişmek için indis kullanıyorum (analoji, llData'dan geliyor), bu yüzden sipariş önemli değil – Roman
Yani, bunu paralel olarak yapmak, iki farklı görevin bir değişiklik yapması gerektiğinde ne olacağıdır. seyrek olmayan matrisinizdeki (x, y) yer değil mi? Belki de node 1 matrisi (x, y) = 1 olarak düşünürken, düğüm 7 matrisi (x, y) = 0 olarak düşünür. Hangisi doğrudur? Bu paralel olarak yapılamaz, çünkü doğal olarak sipariş vardır. Tek yol, [akümülatörler] (http://spark.apache.org/docs/latest/programming-guide.html#accumulators) kullanılarak yapılabilir. –