Ana içeriğe geç
Kesit Power BI
İleri · Fabric

Lakehouse ödevi: PySpark ile temizlik, Delta ve dosya bakımı

Şemayı açıkça vermek, yinelenen ve boş değer, Delta tablosuna yazmak, küçük dosya sorunu, OPTIMIZE, V-Order ve VACUUM’un ne zaman gerektiği.

Uygulamada aç, 6 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Sınav not defterini ayrıntılı kod olarak değil, doğru işlem olarak sorar: hangi adım yineleneni çözer, hangi işlem boş değeri doldurur, hangi ayar Direct Lake’i etkiler. Yine de kavram kendi elinle yapınca kalıcı olur. Bu ödev AnadoluLH lakehouse’undaki Files/ham klasörünü kullanır.

Ödev 1: CSV’den Delta’ya

Lakehouse’a bir not defteri bağla ve çalıştır:

from pyspark.sql import functions as F

df = (spark.read
      .option("header", True)
      .option("inferSchema", False)
      .csv("Files/ham/Musteriler.csv"))

print(df.columns)   # ilk sütun adında görünmez bir karakter var mı?
print(df.count())
df.filter(F.col("Sehir").isNull()).count()
Beklenen sonuç150 satır, Sehir sütununda 7 boş değer. Boşlar veride bilerek var: Musteriler[Sehir] boş olan satırların DAX’taki davranışını “BLANK ve hatalar” dersinde gördün.

inferSchema kapalıyken her sütun metin gelir. Bu bilinçli: türü sen verirsin ve hatalı değeri görürsün.

Ödev 2: Türü ver, boşu çöz, yineleneni kontrol et

temiz = (df
  .withColumn("MusteriNo", F.col("MusteriNo").cast("int"))
  .fillna({"Sehir": "Bilinmiyor"})
  .dropDuplicates(["MusteriNo"]))

print(temiz.count())
temiz.write.format("delta").mode("overwrite").saveAsTable("Musteriler_Temiz")
Beklenen sonuçYine 150 satır: MusteriNo yinelenmiyor. Boş şehirler “Bilinmiyor” oldu. SQL analiz uç noktasında Musteriler_Temiz görünmeli.

Anahtar yinelenmiyorsa dropDuplicates hiçbir şey değiştirmez, ama satır sayısını önce ve sonra karşılaştırmak iyi bir alışkanlıktır. Satır sayısı düştüyse hangi satırın neden silindiğini açıklayabilmelisin.

Delta dosya bakımı

İşlemNe yapar?Ne zaman?
OPTIMIZEKüçük dosyaları birleştirirDosya sayısı tablo boyutundan hızlı artıyorsa; birikmiş sorunu bir kez çöz, sonra otomatik sıkıştırmayı (auto compaction) aç
V-OrderParquet dosyasını okuma için düzenlerSpark’ın yazdığı tablolarda yalnız Direct Lake ana tüketiciyse aç. Ambarda varsayılan olarak açıktır
VACUUMSaklama süresi dolan, başvurulmayan dosyaları silerDepolamayı geri kazanır, etkin dosya düzenini iyileştirmez. Süreyi kısaltmak zaman yolculuğunu ve eşzamanlı okuyucuları bozabilir

Learn’e göre Direct Lake genellikle 1 ile 16 milyon satırlık satır gruplarıyla en iyi çalışır. Küçük ve dengesiz satır grupları daha çok sütun segmenti ve dönüştürme yükü demektir. Bir tablonun yavaş olduğunu görünce önce dosya ve satır grubu durumuna bak, ayarı sonra değiştir.

Ödev 3: Etkisini göster

Aynı tabloya küçük parçalar halinde on kez append yap, dosya sayısına bak, sonra OPTIMIZE çalıştır:

%%sql
OPTIMIZE Musteriler_Temiz;
DESCRIBE DETAIL Musteriler_Temiz;

numFiles değerinin düştüğünü not et. Mülakatta bunu “dosya sayısını ölçtüm, sıkıştırdım, tekrar ölçtüm” diye anlatabilirsin.

Alıştırmalara geç (6)