Kurs
Apache Spark; veri mühendisliği, veri bilimi ve makine öğrenimini ölçekli olarak destekleyen birleşik bir analitik motorudur. Python, SQL, R, Java veya Scala ile kullanılabilir. Spark, ilk olarak 2009 yılında California Üniversitesi, Berkeley’de başlatıldı ve 2013’te Apache Software Foundation’a bağışlandı. Günümüzde ölçeklenebilir bilişim için en yaygın kullanılan motor, olarak kabul ediliyor ve bu teknolojiyi kullanan binlerce iş ilanı bulunuyor. Veri mühendisliği dünyasında bu kadar değerli bir beceri olması nedeniyle, burada hem iş arayışınıza hem de Spark deneyimi olan yetenekleri değerlendirmenize yardımcı olacak mülakat soruları yer alıyor. Kod yanıtları Python ile verilecektir.
Temel Spark Mülakat Soruları
Bu sorular Spark’ın bazı temel kavramlarını kapsar ve yalnızca temel düzeyde deneyime sahip olanlar için uygundur. Tazeleme ihtiyacınız varsa, Python ile Spark SQL’e Giriş kursumuz başlamak için idealdir.
1. Apache Spark nedir ve veri işleme sürecinde neden kullanılır?
Bu soru, adayın Apache Spark’a ve büyük veri ekosistemindeki rolüne dair genel anlayışını ölçer.
Cevap:
Apache Spark; örtük veri paralelliği ve hata toleransı ile tüm kümeleri programlamaya olanak tanıyan, açık kaynaklı, dağıtık bir hesaplama sistemidir. Geleneksel MapReduce’a kıyasla hızı ve kullanım kolaylığı nedeniyle büyük ölçekli veri işleme için kullanılır.
Öne Çıkan Özellikler:
- Bellek İçi Hesaplama: Daha hızlı işlem için veriyi bellekte tutar.
- Ölçeklenebilirlik: Bir makine kümesiyle petabaytlarca veriyi işleyebilir.
- Kullanım Kolaylığı: Java, Scala, Python ve R için API’ler sunar.
- Birleşik Analitik Motoru: SQL, akış verisi, makine öğrenimi ve grafik işlemesini destekler.
2. Dayanıklı Dağıtık Veri Kümeleri (RDD) kavramını açıklayın
Bu soru, Apache Spark’ın temel kavramlarına hakimiyetinizi ölçer. Spark’ı bu kadar güçlü kılan kritik bileşenlerden birini iyi anladığınızdan emin olun.
Dayanıklı Dağıtık Veri Kümeleri (RDD), Apache Spark’ın temel yapı taşlarıdır. Bir küme genelinde paralel olarak üzerinde işlem yapılabilen, değiştirilemez, dağıtık nesne koleksiyonlarını temsil ederler. İşte RDD’lerle ilişkili temel özellikler ve kavramların açıklaması:
- Değiştirilemezlik: RDD’ler değiştirilemezdir; oluşturulduktan sonra içerikleri değiştirilemez. Yalnızca dönüşüm uygulayarak yeni RDD’ler oluşturabilirsiniz. Bu değiştirilemezlik, hata toleransını basitleştirir ve Spark’ın tembel değerlendirme modelini mümkün kılar.
- Dağıtık Olma: RDD’ler bir kümedeki birden çok düğüme dağıtılır; Spark’ın bunlar üzerinde paralel işlemler yapmasına olanak tanır. Her RDD, birden çok bölüme ayrılır ve bu bölümler farklı düğümlerde bağımsız olarak işlenebilir.
- Dayanıklılık: RDD’deki “Dayanıklı”, hata toleransını ifade eder. Spark, her RDD’nin soykütüğünü (lineage) takip ederek dayanıklılığı sağlar. Bir düğüm arızası nedeniyle bir RDD bölümünün kaybı durumunda, Spark bu bölümü soykütük bilgilerini ve özgün veriye uygulanmış dönüşümleri kullanarak yeniden hesaplayabilir.
- Veri Kümesi: RDD’ler verinin dağıtık bir temsildir; yapılandırılmış veya yapılandırılmamış her tür veriyi tutabilirler. Spark, RDD’lerle çalışmak için birden fazla dilde (Scala, Java, Python ve R gibi) API sağlar ve bu da onu farklı kullanım senaryoları ve veri türleri için esnek kılar.
- Tembel Değerlendirme: RDD’ler tembel değerlendirmeyi destekler; yani RDD’ler üzerindeki dönüşümler anında yürütülmez. Bunun yerine, hesaplamayı tanımlayan ancak yürütmeyi bir eylem tetiklenene kadar erteleyen yönlendirilmiş çevrimsiz bir grafik (DAG) oluşturulur. Bu, Spark’ın yürütme planını optimize etmesine ve performansı artırmasına olanak tanır.
3. YARN nedir?
YARN, Hadoop’daki kaynakları yöneten dağıtık bir konteyner yöneticisidir. Spark, Hadoop kümelerinde çalışırken kaynakları daha etkili ve verimli yönetmek için YARN’ı kullanabilir. YARN’ın kritik bileşenlerinden biri, küme genelinde kaynakları verimli tahsis edebilmesi, işleri etkin şekilde zamanlayabilmesi ve düğüm arızalarında hata toleransı sağlamasıdır. Bu, Spark’ı güçlü bir araç yapan birçok bileşenden biridir.
4. Spark RDD’lerde map ve flatMap dönüşümleri arasındaki fark nedir?
Bu soru, Spark RDD’lerdeki (Dayanıklı Dağıtık Veri Kümeleri) farklı dönüşüm türlerini anlayıp anlamadığınızı gösterir.
Cevap:
.map(): RDD’nin her bir elemanını tam olarak bir yeni elemana dönüştürür. Sonuç, giriş RDD’siyle aynı sayıda elemana sahiptir..flatMap(): RDD’nin her bir elemanını sıfır veya daha fazla yeni elemana dönüştürür. Sonuç, giriş RDD’sinden potansiyel olarak farklı sayıda elemana sahip olabilir.
# Example of map
rdd = spark.sparkContext.parallelize([1, 2, 3])
mapped_rdd = rdd.map(lambda x: x * 2)
print(mapped_rdd.collect()) # Output: [2, 4, 6]
# Example of flatMap
flat_mapped_rdd = rdd.flatMap(lambda x: [x, x * 2])
print(flat_mapped_rdd.collect()) # Output: [1, 2, 2, 4, 3, 6]
Bu kod, bir tamsayı RDD’sini dönüştürerek map ve flatMap arasındaki farkı gösterir.
5. Bir DataFrame’den veri sorgulamak için Spark SQL’i nasıl kullanırsınız?
Bu soru, veri analizi görevleri için gerekli olan Spark SQL’i kullanarak veri sorgulama becerisini ölçer.
Cevap:
# Register the DataFrame as a SQL temporary view
df.createOrReplaceTempView("table")
# Execute SQL query
result = spark.sql("SELECT column1, SUM(column2) FROM table GROUP BY column1")
# Show the results
result.show()
Bu örnek, bir DataFrame’den geçici görünüm oluşturup Spark SQL ile group-by sorgusu yapmayı gösterir.
Orta Düzey Spark Mülakat Soruları
Temelleri öğrenip iş hayatında uygulamış olanlar için şu sorular daha sık karşılaşılabilir:
6. Spark’ta tembel değerlendirme (lazy evaluation) kavramını ve önemini açıklayın
Bu soru, performans optimizasyonu için kritik olan Spark’ın temel ilkelerinden birine hakimiyeti ölçer.
Cevap:
Tembel değerlendirme, Spark’ın dönüşümleri çağrıldığı anda yürütmemesi demektir. Bunun yerine, mantıksal bir yürütme planı oluşturur. Gerçek hesaplama, ancak bir eylem (collect veya count gibi) çağrıldığında tetiklenir.
Tembel değerlendirme iki nedenle önemlidir:
- Spark’ın tüm veri işleme iş akışını yürütmeden önce optimize etmesine, işlemleri birleştirerek veri taşımayı (shuffle) en aza indirmesine olanak tanır.
- Veri üzerinden geçiş sayısını azaltır ve performansı iyileştirir.
7. Spark’ta veriyi nasıl kalıcı hale getirirsiniz ve mevcut depolama düzeyleri nelerdir?
Bu soru, performans ayarı ve yinelemeli algoritmalar için önemli olan veri kalıcılığı bilgisini ölçer.
Cevap:
Veri, .persist() veya .cache() yöntemleriyle kalıcı hale getirilebilir. .cache(), varsayılan depolama düzeyiyle .persist() için kısayoldur.
Depolama Düzeyleri:
- MEMORY_ONLY: RDD’yi JVM’de ayrıştırılmış Java nesneleri olarak bellekte tutar. RDD belleğe sığmazsa bazı bölümler önbelleğe alınmaz.
- MEMORY_AND_DISK: RDD’yi bellekte ayrıştırılmış Java nesneleri olarak saklar. Belleğe sığmayan bölümler diske yazılır.
- MEMORY_ONLY_SER: RDD’yi JVM’de serileştirilmiş Java nesneleri olarak tutar. Bellek kullanımını azaltır ancak serileştirme/ters serileştirme için CPU yükünü artırır.
- MEMORY_AND_DISK_SER: MEMORY_AND_DISK’e benzer, ancak nesneleri serileştirilmiş olarak saklar.
- DISK_ONLY: RDD bölümlerini yalnızca diskte tutar.
rdd = spark.sparkContext.parallelize([1, 2, 3, 4, 5])
rdd.persist(storageLevel=StorageLevel.MEMORY_AND_DISK)
8. Spark’ta kayık (skewed) veriyi nasıl ele alırsınız?
Bu soru, veri dengesizliğini ve bunun nasıl yönetileceğini anlama düzeyini ölçer; verimli veri işleme için kritiktir.
Cevap:
Veri kayması, bazı bölümlerde diğerlerine göre önemli ölçüde daha fazla veri olmasıyla oluşur ve performans darboğazlarına yol açar. Baş etme stratejileri şunlardır:
- Tuzlama (Salting): Veriyi bölümler arasında daha dengeli dağıtmak için rastgele bir anahtar eklemek.
- Yeniden Bölümleme: Veriyi daha eşit dağıtmak için bölüm sayısını artırmak.
- Yayın Değişkenleri: Büyük veri kümelerinin taşınmasını önlemek için küçük bir veri kümesini tüm düğümlere yayınlamak.
from pyspark.sql.functions import monotonically_increasing_id, col
# Example of salting
df = df.withColumn("salt", monotonically_increasing_id() % 10)
df = df.withColumn("new_key", col("original_key") + col("salt"))
9. Spark’ta dar (narrow) ve geniş (wide) dönüşümler arasındaki farkı açıklayın
Bu soru, Spark’ın yürütme modelini ve farklı dönüşüm türlerinin performans üzerindeki etkisini anlama seviyesini ölçer.
Cevap:
- Dar Dönüşümler: Her giriş bölümünün tam olarak bir çıkış bölümüne katkıda bulunduğu işlemler. Örnekler:
.map(),.filter()ve.union(). Veri taşımayı gerektirmedikleri için genelde daha hızlıdırlar. - Geniş Dönüşümler: Her giriş bölümünün birden fazla çıkış bölümüne katkıda bulunduğu işlemler. Örnekler:
.groupByKey(),.reduceByKey()ve.join(). Ağ üzerinden veri taşımayı gerektirirler ve bu zaman alıcı olabilir.
# Narrow transformation example
rdd1 = rdd.map(lambda x: x * 2)
# Wide transformation example
rdd2 = rdd.groupByKey()
10. Gerçek Zamanlı Veri İşlemede Spark Streaming
Spark, Apache Kafka veya Amazon Kinesis gibi kaynaklardan gerçek zamanlı veri akışında ölçeklenebilir ve hata toleranslı olduğu için başarılıdır. Bunu Spark Streaming uzantısı aracılığıyla yapar. Harici veri kaynaklarıyla, bu kaynaklardan gelen sürekli veri akışlarını temsil eden giriş DStream’leri kullanarak etkileşime girer.
Spark Streaming, checkpointing ve write-ahead log gibi tekniklerle hata toleransı ve veri tutarlılığını sağlar. Checkpointing, akış uygulamasının durumunu periyodik olarak kalıcı depolamaya (ör. HDFS) kaydederek hatalardan kurtulmayı mümkün kılar; write-ahead log ise harici kaynaklardan alınan veriler için hata toleransı sağlar.
İleri Düzey Spark Mülakat Soruları
Bu sorular, özellikle daha ileri konularda Spark ile daha fazla uygulamalı deneyime sahip kullanıcılar içindir. Tazelemeye ihtiyacınız varsa, Spark Makine Öğrenimi eğitimimize göz atın.
11. Spark’ın makine öğrenimi için nasıl kullanılabileceğini tartışın
Bu soru, görüşülen kişinin Spark ortamı ve MLib kütüphanesine ilişkin bilgisini ölçer.
Spark’ın MLlib kütüphanesi, ölçekli makine öğrenimi görevleri için zengin araç ve algoritma seti sunar. Büyük ölçekli veri kümeleri için özellik mühendisliği ve ön işleme söz konusu olduğunda MLlib, çeşitli gelişmiş teknikler ve optimizasyonlar sağlar:
- Özellik Dönüşümü ve Seçimi: MLlib; ölçekleme, normalizasyon, ikilileştirme ve vektörleştirme (ör. one-hot encoding) gibi bir dizi özellik dönüşüm tekniği sağlar. Ayrıca, korelasyon, bilgi kazanımı veya istatistiksel testlere dayalı filtreleme gibi yöntemlerin yanı sıra boyut indirgeme için Temel Bileşen Analizi (PCA) gibi daha gelişmiş teknikler sunar.
- Kategorik Özelliklerin Ele Alınması: MLlib, kategorik değişkenleri sayısal temsillere dönüştürmek için StringIndexer ve bunları ikili vektörlere dönüştürmek için OneHotEncoder gibi araçlar içerir. Bu dönüşümler, dağıtık Spark kümeleri genelinde paralel yürütme için optimize edilmiştir.
- Pipeline API’si: Spark’ın Pipeline API’si, birden çok özellik mühendisliği ve modelleme aşamasını tek bir iş akışında zincirlemeye olanak tanır. Bu, karmaşık özellik dönüşüm hatlarının oluşturulmasını kolaylaştırır ve farklı veri kümeleri ve makine öğrenimi görevleri arasında tutarlılık ve tekrarlanabilirlik sağlar.
- Özel Dönüştürücüler ve Tahminleyiciler: MLlib, Spark’ın DataFrame API’sini kullanarak özel özellik dönüştürücüleri ve tahminleyiciler tanımlamaya olanak tanır. Bu, alan-özel özellik mühendisliği tekniklerinin veya üçüncü taraf kütüphanelerin Spark ML hattına entegre edilmesini sağlayarak işlevselliği ve esnekliği artırır.
12. Spark’ın Apache Hadoop HDFS ve Apache Cassandra gibi harici depolama sistemleriyle entegrasyonunu açıklayın. Spark tabanlı bir veri hattında bu entegrasyonlardan yararlanmanın avantajları nelerdir?
Bu soru, Spark tabanlı sistemlerin temel işleyişini ve Spark’ın HDFS ve Apache Cassandra ile nasıl çalıştığını anlama düzeyini ölçer. Hem kodla veri alma yollarını hem de verinin sistem içinde nasıl hareket ettiğini anlamak önemlidir.
- Hadoop HDFS Bağlantısı: Spark, Apache Hadoop HDFS ve Apache Cassandra gibi harici depolama sistemleriyle, her sistem için özel olarak tasarlanmış bağlayıcılar veya kütüphaneler aracılığıyla entegre olur. Örneğin, HDFS entegrasyonu Spark’a gömülüdür; Spark’ın Hadoop InputFormat ve OutputFormat API’lerini kullanarak HDFS’ten doğrudan veri okumasına/yazmasına olanak tanır.
- Apache Cassandra Bağlantısı: Bu entegrasyonlardan yararlanmanın avantajları arasında (HDFS örneğinde) veri yerliliği sayesinde gelişmiş performans, veri erişimi ve manipülasyonunun basitleştirilmesi ve mevcut veri altyapısıyla uyumluluk yer alır. Ayrıca Spark, bu depolama sistemlerinin dağıtık yapısından yararlanarak paralel işlem yapabilir ve ölçeklenebilir veri işleme sağlar.
13. Spark’ta yayın (broadcast) değişkenleri kavramını açıklayın
Spark’taki yayın değişkenleri, dağıtık bir Spark uygulamasında tüm işçi düğümlere önbelleğe alınan ve kullanılabilen salt-okunur değişkenlerdir. Büyük ve salt-okunur veri kümeleri ya da değerleri işçi düğümlere verimli şekilde dağıtmak için kullanılır; böylece ağ yükünü azaltır ve görev performansını artırır.
Yayın değişkenleri serileştirilir ve her işçi düğüme yalnızca bir kez gönderilir; burada belleğe alınır ve birden fazla görevde tekrar kullanılır. Bu, değişkenin her görevle birlikte gönderilmesi ihtiyacını ortadan kaldırır; özellikle büyük veri kümeleri için veri aktarım yükünü azaltır.
- Kullanım: Büyük bir veri kümesi veya değerin, birden çok görev veya hesaplama aşaması arasında paylaşılması gereken senaryolarda yaygın olarak kullanılır. Örneğin, bir DataFrame veya RDD’nin diğerinden belirgin şekilde küçük olduğu join işlemlerinde, küçük olanın yayınlanması ağ üzerinden taşınan veri miktarını azaltarak performansı önemli ölçüde artırabilir.
- Faydalı Senaryolar:
- Join İşlemleri: Küçük veri kümelerinin yayınlanması, ağ trafiğini azaltarak ve görev yürütmesini hızlandırarak performansı büyük ölçüde iyileştirir.
- Arama Tabloları: Zenginleştirme veya filtreleme işlemlerinde kullanılan küçük arama tablolarını veya sözlükleri yayınlamak, tekrarlanan veri aktarımlarını önleyerek performansı artırır.
- Makine Öğrenimi: Dağıtık eğitim sırasında özellik vektörlerinin veya model parametrelerinin işçi düğümlere yayınlanması, özellikle parametreler veri setine kıyasla görece küçük olduğunda, eğitimi hızlandırabilir.
- Zorluklar:
- Bellek Yükü: Büyük değişkenlerin yayınlanması işçi düğümlerde ciddi bellek tüketimine yol açabilir; dikkatli yönetilmezse bellek hatalarına neden olabilir.
- Ağ Tıkanıklığı: Büyük değişkenlerin ilk yayın aşamasında, özellikle büyük kümelerde ve sınırlı ağ bant genişliğinde, ağ tıkanıklığı oluşabilir.
- Dinamik Veri: Yayın değişkenleri yayınlandıktan sonra değiştirilemez; bu nedenle, verinin Spark işi sırasında dinamik olarak güncellenmesi gereken senaryolara uygun değildir.
14. Bir Spark işini bölümleme (partitioning) ve birleştirme (coalescing) ile nasıl optimize edersiniz?
Bu soru, Spark işlerini optimize etme becerisini ölçer; bu, performans ve verimliliği artırmak için kilit bir yetenektir. Spark performans ayarıyla, bölümleme ve birleştirme kullanarak iş yükünün küme genelinde dağıtımını yönetir ve veri işlemlerini daha hızlı gerçekleştirebiliriz.
Cevap:
- Bölümleme: Bir RDD veya DataFrame’deki bölüm sayısını kontrol eder. Bölüm sayısını artırmak veya eşit dağıtmak için
.repartition()kullanın. Bu, daha maliyetlidir ve yalnızca dengeli işlem için verinin eşit bölünmesine ihtiyaç duyulduğunda tercih edilmelidir. - Birleştirme: Tam bir shuffle yapmadan bölüm sayısını azaltır; bölüm sayısını azaltırken
.repartition()’a göre daha verimlidir. Bunun için.coalesce()kullanılır.
# Increasing partitions (full shuffle)
df_repartitioned = df.repartition(10)
# Reducing partitions (no full shuffle)
df_coalesced = df.coalesce(2)
Takip sorusu olarak bu işlemlerin ne zaman daha faydalı olduğu sorulabilir. Bu yöntemlerin büyük veri kümelerinde daha etkili olduğunu ve küçük veri kümelerinde hesaplama gücünün boşa harcanmaması gerektiğini belirtmeyi unutmayın.
15. Spark’ın veri serileştirme formatlarıyla birlikte çalışabilirliğini açıklayın
Veri profesyonelleri çok çeşitli veri formatlarıyla çalışır. Her birinin farklı ödünleşimleri vardır. Spark’ın bu formatlarla genel olarak nasıl etkileştiğini ve performans ile daha geniş ekosistem için yapılması gereken değerlendirmeleri yüksek düzeyde açıklayabilmelisiniz.
- Veri Serileştirme Format Desteği: Spark, Avro, Parquet veya ORC gibi veri serileştirme formatlarıyla yerleşik destek ya da üçüncü taraf kütüphaneler aracılığıyla birlikte çalışır. Bu formatlar; verimli sıkıştırma, sütunlu depolama ve şema evrimi gibi avantajlar sunarak Spark tabanlı hatlarda veri işleme ve depolama için uygundur.
- Veri Okuma Optimizasyonu: Spark, bu formatların iç yapıları ve sıkıştırma tekniklerinden yararlanan özel okuyucular/yazıcılar kullanarak okuma ve yazma işlemlerini optimize eder. Örneğin, Parquet ve ORC sütunlu depolamayı kullanarak G/Ç yükünü en aza indirir ve sorgu performansını iyileştirir.
- Veri Formatı Ödünleşimleri: Ödünleşimler; depolama verimliliği (ör. sıkıştırma oranı), performans (ör. okuma/yazma çıktısı) ve diğer veri işleme araçlarıyla uyumluluğu içerir. Doğru serileştirme formatının seçimi; veri özellikleri, sorgu kalıpları ve veri hattındaki entegrasyon gereksinimleri gibi faktörlere bağlıdır.
Spark Kodlama Mülakat Soruları
Bu kodlama soruları, bir Spark ortamıyla etkileşim için PySpark kullanımına odaklanır.
16. Büyük bir metin dosyasındaki en sık geçen N kelimeyi bulun
Bu soru, Spark ile etkileşim kurma ve Spark’taki eşleme (mapping) kullanımını anlama yeteneğinizi ölçer.
from pyspark import SparkContext
# create your spark context
sc = SparkContext("local", "WordCount")
# import a text file from a local path
lines = sc.textFile("path/to/your/text/file.txt")
# split and map the words
# then reduce by using the words as keys and add to the count
word_counts = lines.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
# order the words and take only the top N frequent words
top_n_words = word_counts.takeOrdered(N, key=lambda x: -x[1])
print(top_n_words)
17. Verilen bir RDD’deki değerlerin ortalamasını bulun
Bu soru, birinin basit bir RDD oluşturup onu nasıl işlediğini gösterme açısından uygundur. Değerlerin ortalamasını bulmak, veri profesyonellerine sıkça verilen bir görevdir ve veriyi alıp bir Spark bağlamında şekillendirmeyi anlamak kritiktir.
from pyspark import SparkContext
# Create sparkContext and name it “Average”
sc = SparkContext("local", "Average")
# Generate Spark RDD
data = sc.parallelize([1, 2, 3, 4, 5])
# Sum the RDD, count the number of values in RDD
total_sum = data.sum()
count = data.count()
# divide sum by count to get average
average = total_sum / count
print("Average:", average)
18. İki RDD arasında sol dış (left outer) birleştirme yapın
Join gibi veri dönüştürme ve manipülasyon görevleri, SparkSQL’in önemli bir parçasıdır. Bu, verilerin farklı kaynaklardan birleştirilmesine ve analizine olanak tanır.
from pyspark import SparkContext
# Create SparkContext
sc = SparkContext("local", "LeftOuterJoin")
# Create two RDDs with tuples sharing keys
rdd1 = sc.parallelize([(1, 'a'), (2, 'b'), (3, 'c')])
rdd2 = sc.parallelize([(1, 'x'), (2, 'y')])
# Use the .leftOuterJoin() method to join the first rdd to the second rdd
joined_rdd = rdd1.leftOuterJoin(rdd2)
# Use the .collect() method to show the rdd
print(joined_rdd.collect())
19. Kafka’dan veri okuyun, dönüşümler uygulayın ve sonuçları HDFS’ye yazın
Bu soru, harici veri kaynaklarından veri alabilme ve Spark’ın bu kaynaklara nasıl bağlandığını anlama becerinizi ölçer. Burada, belirli bir akış için gerekli uzantı/yardımcıların içe aktarılması gibi genel kavramlara odaklanın; kesin kodu ezberlemekten ziyade. SparkContext için uygulama adı (KafkaWordCount) isteğe bağlı parametre olarak seçilmiştir; yine de süreçleri net tuttuğu için faydalıdır.
# Import the sparkcontext, additionally import streaming context and Kafka
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
# Create context
sc = SparkContext("local", "KafkaWordCount")
# Use streaming context to bring in data at 10 second intervals
ssc = StreamingContext(sc, 10) # 10-second batch interval
# Use Kafka param dictionary in order to connect to the stream using the streaming context, the topic of interest, and the parameters
kafka_params = {"metadata.broker.list": "broker1:9092,broker2:9092"}
kafka_stream = KafkaUtils.createDirectStream(ssc, ["topic"], kafka_params)
# save the results of this stream to lines
# perform MapReduce in order to generate dictionary and count by keys
lines = kafka_stream.map(lambda x: x[1])
word_counts = lines.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
# save to external file
word_counts.saveAsTextFiles("hdfs://path/to/save")
# start context until you terminate
ssc.start()
ssc.awaitTermination()
20. Bir Spark DataFrame’i üzerinde temel dönüşüm ve eylemleri nasıl gerçekleştirirsiniz?
Bu soru, adayın Spark’ta DataFrame işlemlerini anlama düzeyini ölçer.
Dönüşümler, select, filter ve groupBy gibi yeni bir DataFrame döndüren işlemlerdir. Eylemler ise show, count ve collect gibi hesaplamayı tetikleyip sonuç döndüren işlemlerdir.
Aşağıdaki örnek; sütun seçme, satır filtreleme ve group-by toplaması yapmayı gösterir.
# Select specific columns
selected_df = df.select("column1", "column2")
# Filter rows based on a condition
filtered_df = df.filter(df["column1"] > 100)
# Group by a column and perform aggregation
grouped_df = df.groupBy("column2").agg({"column1": "sum"})
# Show the results
selected_df.show()
filtered_df.show()
grouped_df.show()
Son Düşünceler
Bu mülakat sorularında ustalaşmak, veri profesyoneli olma yolunda harika bir ilk adımdır. Spark, birçok kuruluş tarafından büyük veri hatlarını yönetmek için kullanılan yaygın bir altyapıdır. Spark’ın avantajlarını ve zorluklarını anlamak, bilgili bir veri profesyoneli olarak öne çıkmanıza yardımcı olacaktır. Bu sadece başlangıç! Spark ile pratik yapmak öğrenmenin en iyi yoludur.
DataCamp’te aşağıdaki PySpark kursları ve eğitimlerle başlayabilirsiniz:
Spark Mülakat SSS
Büyük veri teknolojilerine yeni başlıyorsam Spark ile nasıl başlarım?
DataCamp’teki PySpark’a Giriş, Python ile Spark SQL’e Giriş ve PySpark ile Büyük Veri gibi kursları inceleyerek başlayın.
Gerçek dünya uygulamalarında Spark’ın yaygın kullanım alanları nelerdir?
Spark; ETL hatları, veri keşfi, gerçek zamanlı analitik, makine öğrenimi ve veri ambarı için kullanılır. Spark bilgisi, birçok sektörde pozisyon elde etmenizi sağlar.
Spark, Hadoop MapReduce gibi diğer büyük veri işleme çerçeveleriyle nasıl karşılaştırılır?
Spark, sonuçları mümkün olduğunca bellekte tutarken MapReduce ara sonuçları diske yazar. Ancak Spark, kaynak yönetimi için YARN gibi Hadoop altyapısını kullanabildiğinden sıklıkla birlikte çalışırlar.
Spark küçük ölçekli veri işleme görevleri için de uygun mu, yoksa yalnızca büyük veri için mi?
Evet. Spark, veri işleme ihtiyaçlarına göre ölçeklenecek şekilde tasarlanmıştır. Performans optimizasyonu amacıyla tasarlanmış bazı Spark işlevleri küçük veri kümelerinde hesaplama gücünü boşa harcayabilir; bu nedenle hatlarınızı buna göre ayarlamanız gerekebilir.
Python dışında dillerle Spark kullanabilir miyim?
Evet. Spark; Scala, Java, R ve SQL ile de kullanılabilir.
Mekânsal analiz, makine öğrenimi ve veri hatları konusunda deneyime sahip bir veri bilimciyim. GCP, Hadoop, Hive, Snowflake, Airflow ve diğer veri bilimi/mühendisliği süreçleriyle çalıştım.

