Spark Dataframe&Dataset Operasyonları-2:

Merhaba, bu yazımızda veri ön hazırlığı aşamasında, veri yüklerken, Spark Dataframe oluştururken, dataframe şekillendirirken, onu dönüştürürken, dataframe üzerinde veri keşfi yaparken vb. işlemler için kullandığım spark yapısal API operasyonlarından faydalı bulduklarımı paylaşacağım. Görkemli ve haşmetli makine öğrenmesi, derin öğrenme ve yapay zeka modelleri ile kedileri ve köpekleri ayırmak dururken bu tür basit işlerle niye uğraşıyorsun demeyin. Bahsedilen bu modellerin yakıtı o modelin istediği türden temiz ve kaliteli bir veridir. Şayet o modellerin deposuna kaliteli bir yakıt koyamaz isek görkemlerine gölge düşer, prestijleri sarsılır. Birçok insan veri yükleme ve veri hazırlığı esnasında sorun yaşıyor. Araştırmalara göre makine öğrenmesi projelerinde zaman ve emeğin yaklaşın 5’te 4’ü veri hazırlığına gidiyor. Ben de bizzat bunu tecrübe edenlerdenim.

Spark 2.0 sürümüyle birlikte Spark dataframe/dataset API’sine daha fazla önem vermeye başladı, ilişkisel dünyanın gücünü farketti sanırım 🙂 Sizlere de tavsiyem öncelikli olarak Spark RDD API ile değil Dataframe API ile uğraşın. Belli bir uzmanlık seviyesinden sonra RDD’ye de girersiniz.

Bu yazıda kullanacağım araçlar şunlardır:

  • Spark Sürümü: Spark 2.3.1
  • Geliştirme Ortamı: IntelliJ IDEA
  • Kaynak Yönetimi: Lokal (Windows 10 üzeri Spark)
  • Veri Depolama: Lokal disk
  • Programlama Dili: Scala 2.11.8
  • Bağımlılık Yönetimi ve Derleme: Maven

SparkSession’dan SparkContext’e Erişmek

Yukarıda bahsettiğimiz gibi Spark 2.0’dan önce spark uygulamasına geliştiriciler SparkContext ile erişiyordu. Ancak Spark 2.0 ile birlikte SparkSession geldi ve geliştiriciler artık spark uygulamasına SparkSession ile erişim sağlıyorlar. Peki biz uygulamamızda hiç RDD bazlı bir işlem yapamayacak mıyız? Hayır, yapabileceksiniz. Peki SparkContext ve sc öldümü? Hayır, ölmedi, SparkSession içinde yaşamaya devam ediyor. Eski API’dan alıştığımız ve hala sağda solda bir çok örnek uygulama, hata giderme vb. mecralarda karşılaştığımız SparkContext, HiveContext, SQLContext’e SparkSession ile erişebiliyoruz. Aşağıda SparkSession ile basit bir RDD yaratarak bunun uygulamasını yapacağız:
Kod:

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
      .master("local[4]")
      .getOrCreate()

val myRDD = spark.sparkContext.parallelize(Seq((1,2,3),(4,5,6)))
myRDD.foreach(println)

Sonuç:
(4,5,6)
(1,2,3)

Eğer shell kullanıyor iseniz SparkSession yaratmanıza gerek yok zaten shell SparkSession’ı spark değişkeninde başlatmış olarak açılıyor.

Listelerden Dataset Oluşturmak

Dataframe ve Dataset’leri oluşturmak için birçok yol var. Bunlardan birisi de listelerden dataset oluşturmak. Listeyi oluştururken aynı zamanda sütun isimlerini de belirliyoruz. Ayrıca liste ile collection kavramı altına giren sequence ve array gibi veri yapılarını kasdediyorum.

Kod:

val mySeq = Seq((1,2,3,4),(5,6,7,8),(9,10,11,12),(13,14,15,16))

val ds = spark.createDataset(mySeq)
              .selectExpr("_1 as col1","_2 as col2", "_3 as col3", "_4 as col4")

ds.show()

Sonuç:
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
|   1|   2|   3|   4|
|   5|   6|   7|   8|
|   9|  10|  11|  12|
|  13|  14|  15|  16|
+----+----+----+----+

Yazar Hakkında
Toplam 179 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara