Spark #4 - Spark Context
Spark context (sc) objesi hesaplama kümesine (computing cluster) bağlantıyı sağlayan temel objedir. Herhangi bir Shell başlatıldığında sparkcontext otomatik olarak oluşturulur. Spark context RDD’ leri oluşturmak için kullanılır. Örneğin sc.textfile(…) ile dosyadan sc.hadoopFile(…) ile HDFS veya sc.parallelize(…) ile list, array vb. gibi herhangi bir veri setinden RDD oluşturmak mümkündür. RDD oluşturulduktan sonra .count(), .first() gibi operasyonlar ile RDD işlenir.
Eğer cluster üzerinde çalışyor isek .count() gibi bir operasyon ana program (driver code) tarafından hesaplama düğümlerine (worker node, executors) dağıtılır ve her düğüm noktası kendi count işlemini paralel olarak gerçekleştirir. Operasyonlarda fonksiyonları kullanmak da mümkündür. Böylece RDD nin çıktısı tanımlı fonksiyona girdi olarak sunulur ve yeni RDD’ ler üretilebilir. Örneğin bir dosyadaki “Spark” geçen ik satırı bulmak istersek:
lines=sc.textFile(“:\Spark\README.md”)
sparklines=lines.filter(lambda satir:”Spark” in satir)
sparklines.first()
Yukarıda kullanılan lambda yazımı aslında fonksiyon oluşturmanın Python’ daki kısa halidir. Aynı kod fonksiyon olarak yazılırsa:
def sparkgecenSatirlar(satir) :
return “Spark” in satir
Lambda yazımı yukarıda tanımlı fonksiyonu kullanacak biçimde düzenlenirse:
Sparklines=lines.filter(sparkgecenSatirlar) elde edilir.
Java 8 versiyonuna kadar lambda yazımı desteklenmemekteydi. Bu nedenle, benzer işlem için Java’ da “Function” arabirimini (interface) uygulayan (implement) aşağıdaki kodu yazmalıyız:
JavaRDD<String> sparklines=lines.filter(
new Function<String,Boolean>() {
Boolean call(String satir)
{
return satir.contains(“Spark”);
}
}
);
Java 8 de lambda yazımı ile aynı örnek :
JavaRDD<String> sparklines=lines.filter(satir->satir.contains(“Spark”));
Filter(…) gibi bir fonksiyon kullanarak çalışan operasyonların tüm hesaplama düğümlerinde paralel çalıştırılması ile işlemlerin hızlı sonuçlandırılması hedeflenir. Filter operasyonuna parametre olarak verilen fonksiyon (satir->satir.contains(“Spark”)) tüm hesaplama düğümlerine yollanır. Böylece tek makinede çalışacak biçimde yazılan program (driver) tüm düğümlerde paralel olarak da işletilebilir.
Spark Context Shell dışında Java, Python, Scala gibi programlama dillerinde geliştirilecek ayrı uygulamalar da da üretilebilir.
Örneğin Python da:
conf=SparkConf().setMaster(“local”).setAppName(“Spark Test Uygulaması”)
sc=SperkContext(Conf=conf)
Ya da Java’da:
SparkConf conf=new sparkConf().setMaster(“local”).setAppName(“Spark Test Uygulaması”)
JavaSparkContext sc=new JavaSparkContext(conf)
Yukarıda ki her iki örnek içinde sparkcontext ve conf kütüphanelerinin import edilmesi gereklidir.
Bir sonraki yazımızda RDD’ leri transformasyon ve action operasyonlarını daha detaylı anlatmaya çalışacağım.













