Kayıtlar

SageMaker Notebook'a S3'ten Jar Import etmek

Emr uzerinde Jupyter notebook calistirmak cok kolay. Tek yapmamiz gereken SageMaker console'a giderek yeni bir notebook olusturmak. Buradaki tek puruz, ekstra bir Jar dosyasindan spark job import etmek ve jupyter notebook uzerinde calismak.  Yapmamiz gereken sey, Jar dosyamizi s3 uzerinde bir yere kopyalayip, daha sonra Jar'i jupyter notebook'a import etmek. %%configure -f {     "conf": {          "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3"     },     "jars": [           "//s3 jar yolu"     ] } Bu sayede yolunu verdigimiz Jar (lar) icerisinde spark job'larini notebook uzerinde claistirabilir ve cok keyifli bir development environment olusturabiliriz.  Happy hacking.

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 cize

Data Patterns #1 - Data Summarization Pattern

Resim
Problem Verilen bir DNA dizesinde (mesela "AATGC..."), her bir bazin (A, C, G, T) kac kere gectigini bulunuz. Ornek dna dizilim dosyasi: https://ftp.ncbi.nlm.nih.gov/genomes/INFLUENZA/influenza.fna (1.3 Gb) Cozum Yani aslinda kabaca, verilen text icerisinde gecen distinct karakterleri saymamizi istiyor. Cok basit (kolay demedik) ve temel bir problem.  Ornek bir veri dosyasi icin https://ftp.ncbi.nlm.nih.gov/genomes/INFLUENZA/influenza.fna (1.3 Gb text dosyasi) Input sekline bakacak olursak: >gi|58576|gb|X52226|Influenza A virus (A/FPV/Rostock/34(H7N1)) gene for neuraminidase, genomic RNA AGCAAAAGCAGGAGTTCAAAATGAATCCAAATCAGAAAATAATAACCATTGGGTCAATCTGTATGGGGAT CGGAATAATCAGCCTAATATTACAAATTGGAAACATAATCTCAATGTGGGTTAGTCATTCAATTCAGACT GAAAATCAAAATCACCATGAAGCATGCAACCCAAGCATTGCTGGACAGGATGCAGCTTCAGTGGCACTAG CAGGCAATTCCTCTCTTTGTCCCATTAGTGGGTGGGCTATATACAGTAAAGACAATGGTATAAGAATTGG .... En basta, buyuktur isareti ile baslayan bir yorum satiri var ki bu satiri gozardi etmemiz gerekiyor. Ge

Lombak Nerede?

Resim
 Buradayim arkadaslar, bir yere gittigimiz yok (henuz).  Bu postun amaci, olmedigimi ozellikle kendime gosterebilmek ve de blog yazma konusuna tekrar isinabilmek. Simdi siteye baktim da 3 aydir yeni post gelmemis. Peki ben ne yaptim 3 ayrdir ? - AWS uzerinde daha fazla calismaya basladim. EMR'da Spark calistirmak ile alakali yazacagim seyler var. - Spark performans optimizasyonu ve hatta Spark uzerinde buyuk spatial verilerin islenmesi esnasinda performans optimizasyonu konularinda calistim. Sonuclari paylasacagim.  Onumuzdeki 12 aylik donem icerisinde algoritma calismalarina biraz ara vermeyi planliyorum. Daha ziyade tekrardan big-data ve devops konularina odaklanacagiz. Gorusmek uzere.

CP #49: Heap Problemleri

Resim
Heap  Heap, binary tree'nin ozel bir formudur Complete binary tree ozelligi vardir. (Leaf node'lar arasinda en fazla 1 level fark olabilir) Heap property: her bir node, kendi child node'larindan daha buyuk olmalidir. Max-heap, bir array seklinde de implemente edilebilir. Bu durumda i. node'un child node'lari sirasi ile 2i + 1 ve 2i + 2 olacaktir. Insertion: O(log n) Max element look-up: O(1)  Deletion of the max element: O(log n) Ayni zamanda Priority Queue adi da verilmektedir. Cunku max elemani kopardigimizda, siradaki eleman ondan sonra gelen en buyuk eleman olacaktir. Yani Queue gibi davransa da, elemanlarin oncelik sirasi vardir. Max-heap yaninda min-heap yapisi da bulunur ki, tamamen ayni ozelliklere sahip olup, max eleman icin degil de min eleman icin calisir. Eger sadece en buyuk veya en kucuk elemanla ilgileniyorsak, hizli look-up, arama ve silme islemleri onemli degil ise heap kullanmak iyi bir cozumdur. En buyuk veya kucuk k elemanin bulunmasi gibi probl

CP #48: Binary Tree Problemleri 4

Resim
15. Reconstruct A Binary Tree From Preorder Traversal With Marks Array seklinde preorder traversali verilmis olan binary tree'yi yeniden olusturunuz. Bos olan child node'lar None ile gosterilmis.  Ornek: [1, None, 2]  Root node:1 , left child: None, right child: 2  Cozum Preorder traversal verildiginden, root degerini bulmak icin ilk elemana bakmamiz yeterli. Daha sonraki elemanlar, sol subtree'ye ait olacaktir. Ama problem su ki, sol subtree'nin ne zaman bitip de sag subtree'nin basladigini bilemiyoruz. Ama recursive olarak gidersek, her bir adimda root'u biliyor olacagiz. Daha sonra da, array uzerinde nerede oldugumuzu belirten bir index kullanarak, yolumuzu bulabiliriz. def reconstruct_preorder(preorder):     # recursive olarak binary tree'yi olusturacak metodumuz     # ayni zamanda verilen subtree'nin eleman sayisini da dondurmeli ki     # ornegin sol subtree'nin nerede bittigini bilebilelim      def rec(arr, start_index):          # preorder'

CP #47: Binary Tree Problemleri 3

Resim
12. Reconstruct A Binary Tree From Traversal Data Pre-order ve pre-order node dizilimleri iki liste halinde verilmis olan bir binary tree'yi tekrar olusturunuz. ( leetcode ) Cozum Elimizde neler var once ona bir bakalim.  1. Preorder traversal'de ilk eleman her zaman tree'nin root node'u olacaktir. Bu durumda root node'u biliyoruz. 2. Inorder traversal icerisinde, root node'a kadar olan kisim left subtree'dir. Root node'dan sonraki kisim ise right subtree'dir.  3. Inorder traversal bilgisi kullanarak, left subtree'de kac tane node oldugunu hesaplayabiliriz. Yapmamiz gereken, root'un indexini bulmek. Left subtree'de kac tane node oldugunu bulur isek, preorder traversalda root'tan baslayarak o kadar node gidersek, sag subtree'ye ulasmis oluruz. Ornekte yesil kutucuk olarak gorulebilir.  Bu ilk uc adimi izledigimizde, verilen bir binary tree icin root, left subtree icin inorder ve preorder traversal degerleri ve de right subtree icin