Spark projesine yeni feature nasil eklenir?

 Oncelikle spotify acilir. 

Hayir, long story short, test yazmaya baslayacagiz.

Neden?
Simdi ideal dunyada yasamadigimiz icin bir kod parcasini yaziyoruz ve calismasini bekliyoruz ama beklenen gibi calismiyor. Hele ki cok fazla Dataframe ile calisiyorsaniz, scala bile olsa type system bize yardim etmiyor demektir. Bu durumda yok efendim o columnun adi oyle degildi, yok bu Dataframe'de bu col yoktu aslinda falan gibi birsuru ufak tefek hata yasaniyor. 

Zaten spark uygulamasini calistirmak biraz zaman aliyor. O acidan eger test yazarak baslanmaz ise cok zaman kaybi yasandigini ben bizzat kendi denemelerimde defaatle gordum.

Nasil?
AnyFlatSpec ve ShraedSparkSession ile. Birincisi zaten test kutuphanesi, standart. Ikincisi de bir yaklasim. Bir trait olusturup icerisinde shared bir spark session olusturuyoruz, sirf local testing icin. Daha sonra bunu istedigimiz kadar test icerisinde kullanabiliriz. Bu sayede her test icerisinde yeni bir sparkSession olusturmak zorunda kalmiyoruz ki bu zaman alan bir islem.


Ne kadar?
Cok da degil. Illa religious TDD yapmamiza gerek yok. Bolca dataframe.show() ile ne geliyor ne gidiyor debug edecegiz. Sonra feature'u implemente edip gene show ve loglama ile olup olmadigina bakacagiz. 


Ne belli?

Simdi birkac kendini bilmez cikip da 'zeppelin kullansana' falan demesin. Zeppelin baska, ben halihazirda olan bir projeye feature ekliyorum. Birsuru mevcut metoda classs'a ihityacim var. Bunu zeppelin icerisinde basarmak gercekten mesakkatli. Kendi projenizin fatjar'ini olusturup bunu import edebilirsiniz ama eger kodun geri kalaninda degisiklik yapilacaksa bu metot patlar.

Bir projem, hayalim su ki, sbt'nin bir proje contextinde calisan bir repl'i var. sbt console ile ulasilbilir ve de mevcut projenin tum dependencylerini kullanabilir bir repl. Backend olarak bunu kullanan bir jupyter notebook kernerli ya da zeppelin kerneli yazilabilir. Bu sayede kolayca bir projec contexti icerisinde denemeler yapilabilir. 

Ayrica bir avantajimiz da su olacak ki, feature implemente edildiginde, gercek testler icin elimizde cok guzel malzeme olacak. Feature'i implemente etmek icin yazdigimiz testleri biraz bir toparlama ile production grade testler haline getirebilecegiz. Ama biz once test ile baslamaz isek baya bir code refactor etmemiz gerekebilir ki testability saglanabilmesi acisindan. 

Simdilik bu kadar, feature'i burada implemente etmeyecegim.

Gorusmek uzere.


Burasi bos kalmasin, bir gorsel ile susleyelim.






Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding