Spark v.1.6.0'da aslında çeşitli işlevleri bir araya getiren bir scala uygulaması oluşturdum. Belirli girişler için bir veri çerçevesini taramak için kodum var, bir dataframe üzerinde belirli bir hesaplamayı yapan bir kodum var, bir çıktı oluşturmak için kodum var, vb.Paralel boru hattı nasıl yapılır?
Şu anda bileşenler 'statik olarak', yani, kodum, bir hesaplama yaparak bir bileşen X
kodunu çağırıyorum, sonuçta elde edilen verileri alıyorum ve verileri girdi olarak alan bir Y
bileşenini çağırıyorum.
Bunu daha esnek hale getirmek istiyorum, bir kullanıcı sadece bir boru hattı (muhtemelen paralel yürütme ile bir tane) belirtmelidir. Ben iş akışları aşağıdaki resimdeki gibi, oldukça küçük ve basit olduğu varsayılabilir:
Ancak, ben en iyi bu sorunu yaklaşım nasıl bilmiyorum.
-
Herhalde ve muhtemelen bazı hatalar da ...
- Apache Kıvılcım ML paketinde bir
Pipeline
sınıfla geldiğini gördük oldukça işe neden olacaktır bütün boru hattı mantığı kendim inşa edebileceğini - , ancak, doğru bir şekilde anladığım takdirde paralel yürütmeyi desteklemiyor (örneğin, iki ParquetReader, verileri aynı anda okuyabildiği ve işleyebildiği örnekte)
- , tam olarak bunu yapabilecek Luigi project görünürdür (ancak Luigi'nin uzun süredir devam eden iş akışları için olduğu, kısa süreli iş akışlarına ihtiyaç duyduğum sayfa, Luigi aşırı olabilir mi?)?
Spark'de iş/veri akışı oluşturmak için neler önerirsiniz?
Kodunuzu gerçekten optimize etmenin iyi bir yoludur. Ancak, burada ücretsiz öğle yemeği yok! Kıvılcım borularını süper paralel olarak optimize etmek için kullanmıyorum. Tahminci olarak lojistik regresyon ile basit bir çapraz doğrulama boru hattı için, 4 EC2 üzerinde 3 slave'in CPU kullanımı% 50'nin altındadır. Harika değil! Ancak her şey RAM'de önbellektir. Bunu nasıl optimize edeceğimi araştırıyorum. – Boris