Parquet: Hızlı Sütunlu Depolama
Bir Pandas DataFrame'ini to_parquet() ile Parquet'e yazın, CSV'den daha hızlı okuyun ve yalnızca gereken alanları yüklemek için sütun budama kullanın.
Parquet: Hızlı Sütunlu Depolama, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Parquet Nedir?
Apache Parquet, analitik iş yükleri için tasarlanmış bir sütun tabanlı ikili dosya biçimidir. Verileri metin olarak satır satır depolayan CSV'nin aksine Parquet, her sütunu bitişik bir blokta depolar, verimli biçimde sıkıştırır ve üst verileri kodlar. Bu sayede geniş bir tablodan yalnızca birkaç sütunu okuyan sorgular çok daha hızlı çalışır. Parquet, veri göllerinde (AWS S3, Google Cloud Storage) fiilî standart biçimdir ve Pandas, Dask, Spark ile BigQuery tarafından yerel olarak desteklenir.
to_parquet() ile Parquet Yazma
Bir Pandas DataFrame'i Parquet'e dönüştürmek için tek bir yöntem çağrısı yeterlidir: df.to_parquet('output.parquet'). Varsayılan altyapı pyarrow'dur (pip install pyarrow ile yükleyin). Parquet, sütun veri türlerini tam olarak korur; tarih sütunlarının yeniden okunurken dizelere dönüşmesi artık sorun olmaz. Ayrıca compression parametresiyle kullanıma hazır sıkıştırma desteği sunar; 'snappy' orta düzeyde sıkıştırmayla hızlı okuma/yazma sağlarken 'gzip', hız karşılığında daha yüksek sıkıştırma sunar.
import pandas as pd
import numpy as np
# Create a sample DataFrame
np.random.seed(0)
df = pd.DataFrame({
'date': pd.date_range('2024-01-01', periods=100000, freq='T'),
'value': np.random.randn(100000),
'category': np.random.choice(['A', 'B', 'C'], 100000)
})
# Write to Parquet
df.to_parquet('data.parquet', index=False, compression='snappy')
print('Written to data.parquet')read_parquet() ile Parquet Okuma
pd.read_parquet('output.parquet'), dosyayı yeniden bir DataFrame içine okur. Eşdeğer CSV'yi okumayla karşılaştırıldığında Parquet okuma, çok sütunlu geniş tablolarda genellikle 5-10 kat daha hızlıdır. Veri türleri tam olarak korunur; tarihler datetime64, kategoriler category, tamsayılar ise depolandıkları biçimde int32 veya int64 olarak kalır. Üst veriler dosyanın içine gömülü olduğundan veri türü çıkarımı gerekmez.
import pandas as pd
import time
# Read Parquet
start = time.time()
df = pd.read_parquet('data.parquet')
print(f'Read Parquet: {time.time()-start:.3f}s')
print(df.dtypes)
print(df.shape)Sütun Budama: Yalnızca Gereken Sütunları Okuma
Sütun tabanlı depolamanın en büyük avantajı sütun budamadır: dosyanın geri kalanını taramadan yalnızca belirli sütunları okuyabilirsiniz. Sütun adlarından oluşan bir listeyi columns parametresine verin. 100 sütunlu bir tabloda sütun başına 100 MB bulunuyor ve yalnızca 3 sütuna ihtiyacınız varsa Parquet, 10 GB yerine 3 MB okur. CSV ise herhangi bir sütunu ayıklamak için her karakteri taramak zorundadır. Bu, Parquet'i analitik işlem hatlarındaki geniş tablolar için ideal kılar.
import pandas as pd
# Only load the 2 columns needed for this analysis
df = pd.read_parquet('large_table.parquet',
columns=['date', 'revenue'])
print(df.columns.tolist())
print(df.shape)
print(df.memory_usage(deep=True).sum() / 1e6, 'MB loaded')Satır Grubu Süzme (Koşul İtme)
Parquet, dosyanın alt bilgisinde her satır grubu (satır bloğu) için istatistikleri (en küçük/en büyük) depolar. filters parametresiyle bir süzgeç uyguladığınızda okuyucu, süzgeçle eşleşemeyecek satır gruplarının tamamını atlar; buna koşul itme denir. Örneğin zaman sıralı bir Parquet dosyasında tarihleri süzmek, aralık dışında kalan ay bloklarının tamamını atlayarak yalnızca ilgili kısımları okur. pyarrow altyapısı bunu yerel olarak destekler.
import pandas as pd
# Filter using predicate pushdown — row groups outside range are skipped
df = pd.read_parquet(
'time_series.parquet',
columns=['date', 'value'],
filters=[('date', '>=', '2024-06-01'),
('date', '<', '2024-07-01')]
)
print(f'Loaded {len(df):,} rows (June only)')
print(df.head())Parquet ve CSV: Karşılaştırma
10 milyon satırlı ve 20 sütunlu bir veri kümesi için Parquet ile CSV'nin pratik karşılaştırması şöyledir:
- Dosya boyutu: CSV ~2 GB, Parquet (snappy) ~400 MB
- Okuma süresi (tüm sütunlar): CSV ~15 sn, Parquet ~2 sn
- Okuma süresi (3 sütun): CSV ~15 sn (tümünü taramak zorunda), Parquet ~0,3 sn
- Veri türlerinin korunması: CSV veri türlerini kaybeder, Parquet korur
- İnsan tarafından okunabilirlik: CSV evet, Parquet hayır (ikili)
Verilerin bir kez yazılıp birçok kez okunduğu üretim işlem hatlarında Parquet neredeyse her zaman daha iyi tercihtir.
Bölümlenmiş Parquet Veri Kümeleri
Çok büyük veri kümeleri için Parquet, bölümlenmiş veri kümelerini destekler: veriler, sütun değerlerine göre bir dizin hiyerarşisinde düzenlenmiş birden çok dosyaya ayrılır. Örneğin yıla ve aya göre bölümleme, data/year=2024/month=01/part.parquet yolunu oluşturur. Bölümlenmiş bir veri kümesi okunurken sorguyla eşleşen dizinler otomatik olarak süzülür. Bu, veri göllerindeki standart yerleşimdir ve milyarlarca satır üzerinde verimli aralık sorgularına olanak tanır.
import pandas as pd
# Write a partitioned dataset (requires pyarrow)
df = pd.read_parquet('all_data.parquet')
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df.to_parquet(
'partitioned_data/',
partition_cols=['year', 'month'],
index=False
)
# Creates: partitioned_data/year=2024/month=1/part-0.parquet etc.Bölümlenmiş Veri Kümelerini Okuma
Bölümlenmiş bir Parquet dizinini okumak, tek bir dosyayı okumakla aynıdır; Pandas (pyarrow aracılığıyla) tüm bölüm dosyalarını otomatik olarak bulur. Bölüm sütunlarının değerleri, elde edilen DataFrame'e sütun olarak eklenir. Ayrıca bölüm sütunu değerlerine göre tüm dizin alt ağaçlarının atlandığı bölüm budamadan yararlanmak için filters kullanabilirsiniz. Bu sayede 1 TB'lık bölümlenmiş bir veri kümesini sorgulamak, birkaç MB okumak gibi hissettirir.
import pandas as pd
# Read the entire partitioned dataset
df_all = pd.read_parquet('partitioned_data/')
print('All years:', df_all['year'].unique())
# Read only 2024 data using partition pruning
df_2024 = pd.read_parquet(
'partitioned_data/',
filters=[('year', '==', 2024)]
)
print('2024 rows:', len(df_2024))Dask ile Parquet
Dask, dd.read_parquet() ve ddf.to_parquet() ile Parquet'i yerel olarak okur ve yazar. Bölümlenmiş bir Parquet dizinindeki her dosya, bir Dask bölümü hâline gelir ve tamamen paralel okumaları mümkün kılar. Dask, süzgeçler belirtildiğinde koşul itmeden de yararlanır. Büyük bir Dask sonucunu bölümlenmiş bir Parquet veri kümesine yazmak, modern veri mühendisliği işlem hatlarında çıktı üretmenin standart yoludur.
import dask.dataframe as dd
# Read partitioned Parquet with Dask (each file = one partition)
ddf = dd.read_parquet('partitioned_data/',
columns=['date', 'revenue', 'region'],
filters=[('year', '==', 2024)])
# Compute aggregation in parallel
result = ddf.groupby('region')['revenue'].sum().compute()
print(result.sort_values(ascending=False))Sıkıştırma ve Kodlama Seçenekleri
Parquet, birden çok sıkıştırma algoritmasını ve dahili kodlama şemasını destekler. Snappy (varsayılan), orta düzeyde sıkıştırmayla hıza öncelik verir. Gzip, yaklaşık %30 daha küçük dosyalar oluşturur, ancak okuma/yazma daha yavaştır. Zstd, her ikisinden daha iyi bir hız ve sıkıştırma dengesi sağlar. Parquet, tamsayı sütunlarında boyutu daha da küçültmek için sizin ek bir yapılandırma yapmanıza gerek kalmadan otomatik olarak delta kodlama veya sözlük kodlama uygular.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({'id': range(500000), 'val': np.random.randn(500000)})
for comp in ['snappy', 'gzip', 'zstd']:
fname = f'data_{comp}.parquet'
df.to_parquet(fname, compression=comp, index=False)
import os
size_mb = os.path.getsize(fname) / 1e6
print(f'{comp}: {size_mb:.2f} MB')İşlem Hattınızda CSV'nin Yerine Parquet Kullanma
Parquet'i benimsemenin en basit yolu, projenin başına tek seferlik bir dönüştürme adımı eklemektir: CSV'nizi bir kez okuyun, veri türlerini temizleyip dönüştürün ve Parquet olarak kaydedin. Sonraki tüm çalıştırmalarda CSV yerine Parquet dosyasını okuyun. Bu yaklaşım, kodda en az değişiklikle hız ve depolama açısından hemen fayda sağlar. Yeni veriler CSV olarak geliyorsa (örneğin gece aktarımları), herhangi bir analiz başlamadan önce Parquet yazan bir dönüştürme adımını işlem hattınıza ekleyin.
import pandas as pd
# One-time conversion
df = pd.read_csv('raw_data.csv',
parse_dates=['date'],
dtype={'category': 'category',
'amount': 'float32'})
df.to_parquet('clean_data.parquet', index=False)
# All future reads use Parquet
df_fast = pd.read_parquet('clean_data.parquet')
print('Loaded from Parquet:', df_fast.dtypes.to_dict())Hızlı Kontrol
Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: to_parquet() ve read_parquet(), CSV'ye kıyasla daha hızlı, daha küçük ve veri türlerini koruyan dosya G/Ç işlemleri sağlar; sütun budama, columns parametresiyle yalnızca gereken sütunları okuyarak dosyanın tamamının taranmasını önler; sütun değerlerine göre düzenlenen bölümlenmiş Parquet veri kümeleri ise büyük veri göllerinde verimli aralık sorguları için bölüm budamayı mümkün kılar. Sırada Pandas'ı SQLAlchemy kullanarak ilişkisel veritabanlarına bağlayacağız.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Parquet: Hızlı Sütunlu Depolama” dersi ücretsiz mi?
Evet — “Parquet: Hızlı Sütunlu Depolama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Parquet: Hızlı Sütunlu Depolama” dersinde ne öğreneceğim?
Bir Pandas DataFrame'ini to_parquet() ile Parquet'e yazın, CSV'den daha hızlı okuyun ve yalnızca gereken alanları yüklemek için sütun budama kullanın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Parquet: Hızlı Sütunlu Depolama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- chunksize ile CSV Akışı
- Parçalar Arası Artımlı Toplulaştırma
- Dask DataFrame'lerine Giriş
- Parquet: Hızlı Sütunlu Depolama