Zeppelin Notebook Scala'dan Python'a Veri Paylasimi
Cok fazla tatavaya girmeden son donemde karsialstigim bir problemle ilgili cozumumu paylasmak istiyorum.
Neden Zeppelin?
Oncelikle neden ve ne sekilde zeppelin kullaniyorum? Aslinda tabi ki production-grade uygulamalari zeppelin ile gelistirmiyoruz. sbt bazli baya duz IntelliJ ile gelistirdigimiz scala / spark uygulamalari var. Ancak bazi durumlar oluyor ki, bir metodu alip incelemek istiyorum. Farkli inputlar ile ne gibi sonuclar veriyor gormek istiyorum. Yani elimizdeki mevcut scala / spark projesi ile biraz oynamak istiyorum.
Bunun icin oncelikle scala projesini assemble ederek (sbt assembly plugin kullaniyorum), zeppelin'deki spark interpereter'e import ediyorum. Daha sonra zeppelin notebooklar icerisinde bu projeimin istedigim kisimlarini import ederek cagirabiliyorum.
Gorsellestirme onemli bir mevzumuzdur
Ve bir noktada bu sonuclari gorsellestirmem gerekiyor. Ozellikle spatial data ile ugrasirken 2d scatter plot guzel gidiyor diyebilirim. Ancak scala tarafinda bunu cizecek bir durumum yok. (Belki vardir ama ben bilmiyorum). (Su an bu blogu yazarken aklima aslinda SedonaViz geldi, bak onu denememistim.)
Bu durumda madem ki zeppelin bircok farkli interpreter barindiriyor, ve bu interpreterleri ayni notebook icerisinde kullanabiliyoruz, o zaman scala tarafinda elde ettigimiz sonuclari python tarafin aktarip super gorsellestirme kutuphenelerinin keyfini cikarabiliriz.
Peki bu veri transferi nasil olacak? Bu noktada yine spark bizim yardimimiza kosuyor. Scala veya Python tarafindan bagimsiz olarak, Spark session uzerinde olusturulan tempView'lere erisilebiliyor.
Soyle ki Scala tarafinda bir dataframe hazirlayalim:
val preparedDF = spark.read.parquet("/home/lombak/bazi_birtakim_datalar/")
// ... bazi islemler ..
// ve son olarak bir temp view olusturuyoruz
preparedDF .createTempView("preparedDF")
# istersek okudugumuz uzerinde bazi revizyonlar yapabiliriz
Yorumlar
Yorum Gönder