2016-04-03 9 views
0

Bir scala işlevi rdd.map()'a geçirilir. Mantık, fonksiyonun kendisine dahil edilmek için çok karmaşıktır ve bunun yerine mantık, bir object skalasında kapsüllenir. Nesne aşağıdaki örnekte olduğu gibi, Spark bağlamı başlatır uygulamanın bir parçasıdır:Paketleme istemcisi yan kodu bir RDD'ye geçirmek için

soru
def func(s.String) = { 
    // LogicEngine is object which, given a string, returns a different string 
    LogicEngine.process(s) 
} 

val sc = new SparkContext(config) 

val rdd = sc.textFile(“…”) 

val rdd2 = rdd.map(func) 

, kendisi düğüm geçirilir, böylece bu yapmak için doğru bir şekilde ne olduğu ile ilgili rdd'nin kendisi işleniyor (istemcide oturmak yerine, rdd'ye iletilen işlev koduyla birlikte yaşıyor)?

Teşekkürler

cevap

1

Zaten sahip olduğunuz budur. Her bir düğüm, ilk erişildiğinde kendi kopyası olan 'u başlatacak ve kullanacaktır.

+0

Teşekkürler. Bir adım daha ileriye gitmek gerekirse: LogicEngine'in kullandığı dahili, statik bir arama listesi varsa, bu kodla birlikte düğüme iletilecektir. Ancak, LogicEngine, rdd'ler işlendikçe büyüyen dinamik bir liste kullanıyorsa ne olur? Her düğüm, önbelleği yalnızca ilk defa rdd'ye geçtiği durumda görür mü? – user1052610

+0

https://spark.apache.org/docs/latest/programming-guide.html#shared-variables sayfasına bakın. –

+0

Anlayışımın doğru olduğunu açıklığa kavuşturmak için - küresel bir değişkeni uygulamak - bu durumda bir önbellek - dinamik olarak (düğümlerin kendileri tarafından) güncellenecek ve tüm düğümlerde paylaşılacak bir Akümülatör kullanmalıyız. – user1052610