Merhabalar bugünkü yazımda size PySpark Window Functions’ın  işlevinden ve PySpark Sql ve PySpark DataFrame API ile kullanımından bahsedeceğim.

Pyspark: Apache Spark, Scala programlama dilinde yazılmıştır. PySpark, Apache Spark ve Python işbirliğini desteklemek yani Spark için yazılmış bir Python API’dır. PySpark sayesinde Python ve Spark’ın bazı özellikleri birlikte kullanılabilir hale gelir. Ayrıca PySpark, Apache Spark ve Python programlama dilinde Esnek Dağıtılmış Veri Kümeleri (Resilient Distributed Datasets) ile arayüz oluşturmanıza yardımcı olur. Spark, Python ve Java gibi bir programlama dili olmadığı için PySpark’a ihtiyaç duyulmuştur. Bu sayede geliştiriciler ve veri bilimciler, verileri hızlı bir şekilde sorgulamak, analiz etmek ve dönüştürmek için PySpark’ı uygulamalarına dahil ederler.

Window Functions: PySpark Window Functions işlevleri bir grup  girdi satırı üzerinde çeşitli analitik işlemler gerçekleştirir ve her girdi satırı için ayrı ayrı sonuç döndürür. Bu işlemin yapılabilmesi için kullanılan veriyi partitionlamamız gerekir. PySpark Sql üç tür işlevi destekler. Bunlar;

  • Sıralama Fonksiyonları
  • Analitik Fonksiyonlar
  • Toplama (aggregate) Fonksiyonları

Kullandığımız Versiyonlar ;

  • Pyspark 3
  • Python 3.6

İlk olarak gerekli kütüphaneleri import ediyoruz;

Copy to Clipboard

Spark session oluşturuyoruz.

Copy to Clipboard

Csv formatındaki datayı okuyoruz.

Copy to Clipboard

Datayı tanıyalım ve inceleyelim;

printSchema() fonksiyonu ile şemayı inceleyebiliriz.

Copy to Clipboard

Genel olarak datayı incelemek için ise show() fonksiyonunu kullanacağız.

Copy to Clipboard

Burada parantez içindeki ilk değer görmek istediğim satır sayısını, ikinci değer ise tüm sütunları görmek istediğimi belirtiyor.

Datamız üzerinde örnekler yapmaya başlayalım;

1. Sıralama Fonksiyonları

1.1. row_number(): 1’den başlayarak her window partitionın sonuna kadar sıralı satır numarası verir.

Bu ve diğer örnekler için oluşturulan  window’da “id” kolonu partition kolonu olarak belirlenmiş ve sıralama “calldate” kolonuna göre yapılmıştır.

Copy to Clipboard

Çıktının idlere göre gruplandığını ve her grubun da kendi içinde calldate’e göre sıralandığını görüyoruz. Her grubun row_number’ı da kendi içinde artan şekilde verilmiştir.

1.2.rank(): Bir window partition’ları için elde edilen sonucuçları kendi içlerinde sıralar. Tekrar eden değerler varsa sonrakine geçişte değeri tekrar ettiği kadar arttırır. Daha iyi anlamak için id değeri 7 olan kişiye ait son 3 satırı inceleyebiliriz.

Copy to Clipboard

1.3.dense_rank(): rank() fonksiyonu ile benzer işleve sahiptir ancak sıralamada tekrarlayan değerler olsa bile boşluk bırakmaz (değer atlamaz).

Copy to Clipboard

1.4.percent_rank(): Temelde rank fonksiyonu ile benzer çalışır.Ancak belli farklılıklar vardır. Her window partition içindeki ilk değer 0 son değer ise 1 değerini alır. Aradakiler içinse 0-1 aralığı eleman sayısına bölünür ve sonraki satıra geçtikçe 0’dan başyarak çıkan değer kadar arttırılır.

Copy to Clipboard

Şu ana kadar incelediğimiz fonksiyonların işlevleri daha kolay ayırt edebilmek için aşağıdaki tabloya bakabiliriz;

Copy to Clipboard

1.5.ntile(): Bir window partition içindeki sonuç satırlarının göreli sırasını döndürür. İlk örnekte ntile fonksiyonuna parametre olarak 2’yi verdik yani sonuçlar 1 ya da 2 değerini alacak şekilde gelecek. İkinci örnekte ise prametre olarak 3’ü verdik bu durumda da 1-2-3 değerleri alınabilir.

Copy to Clipboard
Copy to Clipboard

2. Analitik Fonksiyonlar

2.1.cume_dist(): Bir window partition içindeki değerlerin kümülatif dağılımını eldek etmek için kullanılır.

Copy to Clipboard

2.2.lead(): Fonksiyonun aldığı parametredeki offset değerine göre sonraki satır verisini getiren fonksiyondur. Sql’deki lead fonksiyonu ile aynı işlevdedir. Aşağıdaki örnekte her kişinin sonraki arama tarihinin yeni kolona yazdırıldığını görebiliriz.

Copy to Clipboard

2.3.lag(): Fonksiyonun aldığı parametredeki offset değerine göre önceki satır verisini getiren fonksiyondur. Sql’deki lag fonksiyonu ile aynı işlevdedir. Aşağıdaki örnekte her kişinin önceki arama tarihinin yeni kolona yazdırıldığını görebiliriz.

Copy to Clipboard

3. Toplama (Aggregate) Fonksiyonları

Her window partition için sum, avg, max, min değerlerini hesaplayabiliriz. Bunun için aşağıdaki örneği inceleyelim.

Copy to Clipboard

id değeri 7 olan kaydı ele alırsak ortalama konuşma süresinin 46.75 s, toplam konuşma süresinin 374 s, min konuşma süresinin 11 s ve max konuşma süresinin 89 s olduğunu gözlemleyebiliriz.