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")


simdi zeppelin notebookumuzda yeni bir hucre olusturark, bunu pyspark interpreteri tarafindan calistirilacak sekilde annotate ediyoruz (hucrenin en basina %spark.pyspark kouyuyoruz):

    %spark.pyspark

    # bu inline direktifi de onemli yoksa plotlar zeppelin notebook'ta goruntulenmiyor
    %matplotlib inline 

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns

    # scala tarafinda olusturdugumuz temp view'i burada okuyabiliyoruz :)
    df = sqlContext.table("preparedDF")

    # istersek okudugumuz uzerinde bazi revizyonlar yapabiliriz
    # gorsellestirme icin hazirlayabiliriz
    dff = df.select("x_coordinate", "y_coordinate")

    # pandas df'e de cevirdik mi tamam
    pdf = dff.toPandas()

    sns.scatterplot(data=pdf, x="x_coordinate", y="y_coordinate")


Iste boyleyken boyle arkadaslar, hepinize hayirli hackler dilerken, bloguma burada son veriyorum.





Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding