Ana içeriğe geç

Apache Arrow: Uygulamalı Örneklerle Başlangıç Rehberi

Bu yazı, Apache Arrow’u Python örnekleriyle anlaşılır kılar. Kurulumu, Arrow dizileri ve tablolarını oluşturmayı, büyük verilerle verimli çalışmayı ve pandas ile Spark gibi araçlarla entegrasyonu öğreneceksiniz.
· 11 dk. oku

Yapay Zeka ile Keşfedin

Apache Arrow, farklı araçların ve sistemlerin verileri hızlı ve kolay bir şekilde paylaşmasına yardımcı olur. Verileri bellek içinde kalan özel bir sütun tabanlı formatta saklar; bu da onunla çalışmayı gerçekten çok hızlı hale getirir.

Bu eğitimde, Apache Arrow’un temellerini adım adım anlatacağım. Nasıl çalıştığını ve projelerinizde nasıl kullanabileceğinizi anlamanız için uygulamalı örnekler göreceksiniz.

Apache Arrow nedir?

Apache Arrow işin yüksek performanslı bellek içi veri işleme için açık kaynaklı, çok dilli bir platform olduğu söylenebilir. Modern CPU’lar için optimize edilmiş standartlaştırılmış bir sütunlu bellek formatı tanımlar ve verimli analitik ile vektörleştirilmiş hesaplamayı mümkün kılar.

Arrow ayrıca sistemler ve diller arasında serileştirme ihtiyacını ortadan kaldırır; bu da sıfır kopya okumalara imkân verir ve işleme yükünü azaltır. 

pandas, Apache Spark ve Dask gibi araçlarla iyi çalıştığı için verileri minimum çabayla taşıyabilirsiniz. Bu da çok fazla veriyi işlemesi gereken hızlı ve esnek sistemler kuran herkes için onu mükemmel bir seçenek yapar.

Şimdi, birkaç pratik örnekle Arrow’u keşfedelim!

Apache Arrow’u yükleme

Apache Arrow; C, C++, C#, Python, Rust, Java, JavaScript, Julia, Go, Ruby ve R dahil olmak üzere birden fazla dili destekler. 

Windows, macOS ve Debian, Ubuntu, CentOS ile Red Hat Enterprise Linux gibi popüler Linux dağıtımlarında çalışır.

Bu rehberde onu Python ile kullanacağız.

Adım adım kurulum rehberi

PyPI’de yayımlanan resmi ikili paketleri kullanarak Python için Apache Arrow nasıl kurulur, bakalım. Bu adımlar Windows, macOS ve Linux’ta aynıdır.

Adım 1: Python kurulu mu, kontrol edin

Terminalinizi açın ve şunu çalıştırın:

python --version

Bu komut bir sürüm numarası döndürürse hazırsınız demektir. Aksi halde Python’u resmi siteden yükleyin.

Adım 2: pip ile pyarrow yükleyin

Python için Apache Arrow’u yüklemek üzere şunu çalıştırın:

pip install 'pyarrow==19.0.* '  

*, 19.0 serisinin en güncel yama sürümünü almanızı sağlar. 

requirements.txt dosyanızda da pyarrow==19.0.* kullanmanızı öneririm; böylece ortamlar arasında tutarlılık sağlanır. Bu işlem, tekerlek dosyasına dâhil edilen gerekli Apache Arrow ve Parquet C++ ikili kitaplıklarıyla birlikte pyarrow’u yükler.

Arrow’u başka bir dil için kurmak isterseniz tam dokümantasyona göz atın.

Kurulumu test etme

Her şeyin çalıştığını kontrol etmek için bu kısa Python parçacığını çalıştırabilirsiniz:

import pyarrow as pa
# Create a simple Arrow array
data = pa.array([1, 2, 3, 4, 5])
print("Apache Arrow is installed and working!")
print("Arrow Array:", data)

pyarrow doğru şekilde kurulmuşsa, dizinin terminalinizde yazdırıldığını görürsünüz. Aksi durumda kod bir hata fırlatır.

Apache Arrow Temelleri

Koda daha derine inmeden önce Apache Arrow’un nasıl yapılandığını anlayalım.

Sütunlu bellek formatını anlama

Bellek içi sütunlu format, Apache Arrow’un en önemli özelliklerinden biridir. Dilden bağımsız, bellek içi bir veri yapısı tanımlar. Ek olarak, üstveri serileştirmeyi, veri taşımaya yönelik bir protokolü ve sistemler arasında veriyi temsil etmenin standart bir yolunu içerir.

Sütunlu formatta veriler, geleneksel satır tabanlı depolamadan farklı olarak satırlar yerine sütunlarda saklanır. Sütunlu yerleşimler, çok daha hızlı tarandıkları ve işlendiği için analitik iş yüklerinde popülerdir.

Aşağıdaki görsel formatı açıklar:

Apache Arrow sütunlu veri formatının nasıl çalıştığını gösteren görsel

Sütunlu format. Kaynak: Apache Arrow dokümanları

Apache Arrow’un formatı, sütunları bitişik bellek bloklarına yerleştirerek verimliliği artırır. Bu, veriyi hızlandıran modern vektörleştirilmiş (SIMD) işlemleri destekler.

Standart bir sütunlu yerleşim kullanarak Arrow, her sistemin kendi iç veri formatını tanımlama ihtiyacını ortadan kaldırır. Bu da serileştirme yükünü ve yinelenen çabayı azaltır. 

Sistemler veriyi daha kolay paylaşabilir ve geliştiriciler farklı dillerde algoritmaları yeniden kullanabilir.

Arrow gibi paylaşılan bir format olmadan, her veritabanı veya araç veriyi aktarmadan önce serileştirmek ve serisini çözmek zorundadır. Bu da maliyet ve karmaşıklık katar. Ayrıca ortak algoritmalar, her sistemin iç veri yapısına göre yeniden yazılmak zorundadır. 

Arrow bunu, verinin bellek içinde nasıl temsil edildiğini standartlaştırarak değiştirir.

Sütunlu formatlar analitik performans ve bellek yakınsaması için harika olsa da sık güncellemeler için tasarlanmamıştır.

Bunun nedeni, sütunlu depolamanın değiştirmekten ziyade hızlı okumaya optimize edilmiş olmasıdır. Veride değişiklik yapmak genellikle bellek kopyalama veya yeniden ayırma gerektirir; bu da yavaş ve kaynak yoğun olabilir.

Arrow, verinin bellek içi temsiline ve serileştirmeye odaklanır. Kullanım senaryonuz sık veri mutasyonu gerektiriyorsa, bunu uygulama seviyesinde ele almanız gerekir.

Arrow ile uyumlu formatlara daha derinlemesine dalmak için, sütun tabanlı veri depolama için ideal olan Apache Parquet rehberine göz atın.        

Arrow veri yapıları

Apache Arrow iki temel veri yapısı sunar: Array ve Table: 

  •  Arrow Array: Bir Array, tek bir veri sütununu temsil eder. Değerlere bitişik bir bellek bloğunda yer verir; bu da hızlı erişim, verimli tarama ve SIMD gibi işlemci düzeyi optimizasyonlara destek sağlar. Her dizi ayrıca null göstergeleri (bitmapler) ve veri tipi bilgisi gibi üstveriler taşıyabilir.
  • Arrow Table: Veriler sıklıkla veritabanı tabloları veya CSV dosyaları gibi iki boyutlu formatlarda gelir. Bu nedenle bir Arrow Table iki boyutlu bir veri kümesini temsil eder. Her sütun parçalara ayrılmış bir dizidir ve tüm sütunlar alan adlarını ve türlerini tanımlayan ortak bir şemayı izler. Parçalar sütunlar arasında farklı olabilir; ancak satırların tutarlı kalması için toplam eleman sayısı hizalı olmalıdır.

Bunu pandas veya R’deki bir DataFrame gibi düşünebilirsiniz. Tablo yapısındadır, verimlidir ve birden çok sütunda eşzamanlı işlemleri destekler.

Temel veri yapıları örneği

Python’da bir Arrow Array ve Table oluşturmanın birkaç örneğine bakalım. 

Aşağıdaki kodu çalıştırmadan önce önceki talimatları izleyerek pyarrow yüklü olduğundan emin olun.

Bir Arrow Array oluşturma

import pyarrow as pa

# Create an Arrow Array (single column)
data = pa.array([1, 2, 3, 4, 5])
print("Arrow Array:")
print(data)

Konsolda bir Arrow Array gösteren görsel.

Bir Arrow Array yazdırma. Görsel: yazar.

Bir Arrow Table oluşturma

import pyarrow as pa

# Create an Arrow Table (multiple columns)
table = pa.table({
    'column1': pa.array([1, 2, 3]),
    'column2': pa.array(['a', 'b', 'c'])
})

print("\nArrow Table:")
print(table)

Konsolda bir Arrow tablosu gösteren görsel.

Bir Arrow Tablosu yazdırma. Görsel: yazar.          

Apache Arrow Array’lerle çalışma

Arrow Array’lerle nasıl çalışılacağını ve dilimleme, filtreleme, üstveri kontrolü gibi yaygın işlemleri nasıl yapacağınızı görelim.

Arrow Array oluşturma

Arrow Array’ler; string, kayan noktalı sayılar ve tamsayılar dâhil farklı veri türleriyle çalışır. İşte nasıl oluşturacağınız:

import pyarrow as pa

# Integer Array
int_array = pa.array([10, 20, 30], type=pa.int32())
print("Integer Array:")
print(int_array)

# String Array
string_array = pa.array(["apple", "banana", "cherry"], type=pa.string())
print("\nString Array:")
print(string_array)

# Floating-point Array
float_array = pa.array([1.1, 2.2, 3.3], type=pa.float64())
print("\nFloating-point Array:")
print(float_array)

Konsolda bir Arrow Integer Array gösteren görsel. 

Konsolda bir Arrow String ve Floating-point Array gösteren görsel.

Farklı veri türlerinde Arrow Array’leri yazdırma. Görsel: yazar.

Arrow Array’lerde temel işlemler

Arrow Array’lerle yapabileceğiniz birkaç yaygın işlemi inceleyelim.

Dilimleme

Dilimleme, bir dizinin bir alt bölümünü almanızı sağlar. Örneğin belirli indeks aralıklarındaki öğeleri çıkarabilirsiniz:

import pyarrow as pa
arr = pa.array([10, 20, 30, 40, 50])
# Slice from index 1 to 4 (3 elements: 20, 30, 40)
sliced = arr.slice(1, 3)
print("Original Array:", arr)
print("Sliced Array (1:4):", sliced)

Konsolda dilimlenmiş bir Arrow Array gösteren görsel.

Dilimlenmiş bir Arrow Array yazdırma. Görsel: yazar.

Filtreleme ve üstveri

Filtreleme, bir koşulu karşılayan değerleri tutmak için Boole maskesi kullanır. Ayrıca tür, uzunluk ve null sayısı gibi üstverilere de erişebilirsiniz. 

import pyarrow.compute as pc

arr = pa.array([10, 20, 30, 40, 50])

# Create a boolean mask: Keep elements > 25
mask = pc.greater(arr, pa.scalar(25))

# Apply the filter
filtered = pc.filter(arr, mask)

print("Filtered Array (values > 25):", filtered)

print("Array Type:", arr.type)
print("Array Length:", len(arr))
print("Null Count:", arr.null_count)
print("Is Null Bitmap Buffers:", arr.buffers())

Konsolda filtrelenmiş bir Arrow Array gösteren görsel

Filtrelenmiş bir Arrow Array yazdırma. Görsel: yazar.

Konsolda Arrow Array üstverisini gösteren görsel.

Bir Arrow Array’in Üstverisini yazdırma. Görsel: yazar.

Apache Arrow Tablolarını kullanma

Arrow Tablolarını Arrow Array’lerden veya doğrudan sözlükler gibi yerel Python veri yapılarından oluşturabilirsiniz. Nasıl olduğuna bakalım. 

Tablo oluşturma ve görüntüleme

Bir Arrow Tablosu oluşturmanın iki yaygın yolu vardır:

  1. Birden fazla Arrow Array kullanmak
  2. pa.table() ile bir Python sözlüğü kullanmak

Her iki yöntemi de sırayla inceleyelim.

1. Arrow Array kullanma

import pyarrow as pa

# Create individual Arrow Arrays
ids = pa.array([1, 2, 3])
names = pa.array(['Alice', 'Bob', 'Charlie'])
scores = pa.array([85.0, 92.5, 78.3])

# Combine them into a Table
table = pa.table({
    'id': ids,
    'name': names,
    'score': scores
})

print("Arrow Table from Arrays:")
print(table)

Yukarıdaki kodda:

  • Üç dizi oluşturuyoruz (tamsayı, string, float)
  • Her sütuna bir ad vererek bir şema tanımlıyoruz
  • Bunları pa.table() ile bir Tabloya birleştiriyoruz

Konsolda birden fazla Arrow Array kullanarak oluşturulmuş bir Arrow Tablosu gösteren görsel.

Birden fazla Arrow Array kullanarak bir Arrow Tablosu oluşturma. Görsel: yazar.

2. Bir Python sözlüğü kullanma

Şimdi, bir Python sözlüğünden nasıl Tablo oluşturulacağını görelim.

# Create a table directly from Python data
data = {
    'id': [4, 5, 6],
    'name': ['Diana', 'Eve', 'Frank'],
    'score': [88.0, 79.5, 91.2]
}

table2 = pa.table(data)

print("\nArrow Table from Dictionary:")
print(table2)

Bu yöntem daha kısa ve derlidir. Dizileri elle tanımlamak zorunda değiliz; Arrow bunu bizim için halleder. 

Konsolda doğrudan Python sözlüklerinden oluşturulmuş bir Arrow Tablosu gösteren görsel.

Doğrudan Python sözlüklerinden bir Arrow Tablosu oluşturma. Görsel: yazar.

Arrow Tabloları ile pandas DataFrame’ler arasında dönüştürme

Arrow’un en büyük güçlü yönlerinden biri birlikte çalışabilirliğidir. Bir Arrow Tablosu ile bir pandas DataFrame arasında kolayca geçiş yapabilirsiniz. Nasıl yapıldığına bakalım:

Bir Arrow Tablosunu Pandas DataFrame’e dönüştürme

import pyarrow as pa
import pandas as pd

# Create an Arrow Table
data = {
    'numbers': [1, 2, 3],
    'fruits': ['apple', 'banana', 'cherry'],
    'prices': [1.1, 2.2, 3.3]
}
arrow_table = pa.table(data)

# Convert Arrow Table to pandas DataFrame
df = arrow_table.to_pandas()

# Show the DataFrame
print(df)

Bir Arrow Tablosunun Pandas DataFrame’e dönüştürülmesinin sonuçlarını gösteren görsel.

Bir Arrow Tablosunu Pandas DataFrame’e dönüştürme. Görsel: yazar.

Bir Pandas DataFrame’i Arrow Tablosuna dönüştürme

Şimdi de tersini nasıl yapacağımıza bakalım: 

import pyarrow as pa
import pandas as pd

# Create a pandas DataFrame
df = pd.DataFrame({
    'numbers': [1, 2, 3],
    'fruits': ['apple', 'banana', 'cherry'],
    'prices': [1.1, 2.2, 3.3]
})

# Convert pandas DataFrame to Arrow Table
arrow_table = pa.Table.from_pandas(df)

# Show the Arrow Table
print(arrow_table)

pandas DataFrame’den Arrow Tablosuna dönüştürme. Görsel: yazar.

Apache Arrow ile Veri Serileştirme

Serileştirme, karmaşık nesneleri veya veri yapılarını saklamak ya da sistemler arasında göndermek için bayt akışına dönüştürme işlemidir. Ancak Apache Arrow farklı bir yaklaşım benimser.

Arrow hız için tasarlanmış sütunlu bir bellek formatı kullandığından geleneksel serileştirmeden kaçınır. Bunun yerine, bir paylaşımlı bellek modeline dayanır; burada birden çok süreç, veriye kopyalama veya dönüştürme olmadan doğrudan erişebilir.

Şunları sağlar:

  • Veri kopyalamadan kaynaklı ek yükü azaltır
  • Veriyi yerinde paylaşarak bellek kullanımını düşürür
  • Sistemler ve diller arasında veri alışverişini basitleştirir

Arrow verisini kaydetme ve yükleme

Feather dosya formatını kullanarak Arrow verisini nasıl kaydedip Python ile tekrar bir Tabloya yükleyebileceğinize bakalım.

Arrow Tablosunu bir Feather Dosyasına Kaydetme

import pandas as pd
import pyarrow as pa
import pyarrow.feather as feather

# Create a sample pandas DataFrame
df = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'score': [95.5, 82.0, 77.5]
})

# Convert DataFrame to Arrow Table
table = pa.Table.from_pandas(df)
# Save Arrow Table to a Feather file
feather.write_feather(table, 'example.feather')
print("Arrow table saved to 'example.feather'")

Bir DataFrame’in bir Arrow Tablosuna kaydedilmesinin sonuçlarını gösteren görsel.

DataFrame’den Arrow Tablosuna dönüştürme. Görsel: yazar.

Bir Feather Dosyasından Arrow Tablosu Yükleme

Ardından, daha önce oluşturduğumuz Feather dosyasından bir Arrow Tablosu yükleyebiliriz.

import pyarrow.feather as feather

# Load the Feather file into an Arrow Table
loaded_table = feather.read_table('example.feather')

# (Optional) Convert back to pandas DataFrame
df_loaded = loaded_table.to_pandas()

# Print the loaded data
print(df_loaded)

Konsolda bir Feather dosyasından Arrow Tablosu yüklemenin sonuçlarını gösteren görsel.

Bir Feather dosyasından Arrow Tablosu yükleme. Görsel: yazar.

Gördüğünüz gibi, elle serileştirmeye gerek yok. Arrow verisini kaydetmek ve yüklemek sadece birkaç satır kod gerektirir.

pandas’a yeniyseniz veya kısa bir hatırlatmaya ihtiyacınız varsa, bu pandas cheat sheet, hızlı veri işlemleri için Arrow’a harika bir eşlikçidir.

Apache Arrow’u Daha Büyük Veri Kümeleriyle Kullanma

Büyük bir veri kümesini yüklerken, filtrelerken ve analiz ederken Arrow’un ne kadar hızlı ve etkili olabileceğine dair gerçek bir örneğe bakalım.

Büyük bir veri kümesini Arrow’a yükleme

Bir milyon satırlı bir pandas DataFrame oluşturarak başlayacağız.

Adım 1: Büyük bir DataFrame oluşturma

import pandas as pd
import pyarrow as pa
import pyarrow.compute as pc
import time
df = pd.DataFrame({
    'id': range(1, 1_000_001),  #assuming a dataset with a million rows
    'value': pd.np.random.randint(1, 1000, size=1_000_000),
    'category': pd.np.random.choice(['A', 'B', 'C'], size=1_000_000)
})

Adım 2: Arrow Tablosuna dönüştürme

start = time.time()
arrow_table = pa.Table.from_pandas(df)
end = time.time()
print(f"Conversion to Arrow Table took {end - start:.4f} seconds")

Adım 3: Arrow’un Compute API’ı ile filtreleme

# Example: Filter rows where 'value' > 990
start = time.time()
filtered_table = pc.filter(arrow_table, pc.greater(arrow_table['value'], pa.scalar(990)))
end = time.time()

# Result summary
print(f"Filtering took {end - start:.4f} seconds")
print(f"Filtered row count: {filtered_table.num_rows}")

Adım 4: pandas’a geri dönüştürme (sıfır kopya)

start = time.time()
filtered_df = filtered_table.to_pandas()
end = time.time()
print(f"Conversion to pandas DataFrame took {end - start:.4f} seconds")

Büyük bir veri kümesini bir Arrow Array’e yükleme sonuçlarını gösteren görsel.

Büyük bir veri kümesini bir Array’e yükleme. Görsel: yazar.

Arrow’un sütunlu formatı ve SIMD destekli hesaplama işlevleri, onu büyük ölçekli bellek içi işlemler için mükemmel bir seçim yapar. Ve sıfır kopya dönüşüm sayesinde pandas’a geri dönmek hızlı ve verimlidir.

Arrow dönüşümünden önce veri yüklediğiniz iş akışları için, pandas ile veri alımını sadeleştirme kursu, pipeline’ınızı optimize edebilir.

Temel analitik işlemler

Arrow’un compute API’ını kullanarak temel analitik işlemler de yapabilirsiniz. İşte daha küçük bir örnek veri kümesiyle hızlı bir demo.

import pyarrow as pa
import pyarrow.compute as pc
# Sample data
data = {
    'id': pa.array([1, 2, 3, 4, 5]),
    'score': pa.array([85, 92, 76, 88, 95]),
    'category': pa.array(['A', 'B', 'A', 'B', 'A'])
}
# Create Arrow Table
table = pa.table(data)

Konsolda pyarrow.compute kullanarak bir Arrow Tablosu oluşturmanın sonuçlarını gösteren görsel.

pyarrow.compute kullanarak bir Arrow Tablosu oluşturma. Görsel: yazar.

Örnek 1: score > 90 olan satırları filtreleme

# Filter rows where score > 90
filter_mask = pc.greater(table['score'], pa.scalar(90))
filtered_table = pc.filter(table, filter_mask)

print(filtered_table.to_pandas())

pyarrow.compute kullanarak satırları filtreleme sonucunu gösteren görsel.

pyarrow.compute kullanarak satırları filtreleme. Görsel: yazar.

Örnek 2: Ortalama score hesaplama

# Compute mean of the "score" column
mean_result = pc.mean(table['score'])
print("Mean score:", mean_result.as_py())

pyarrow.compute kullanarak ortalama score hesaplama sonucunu gösteren görsel.

pyarrow.compute kullanarak Ortalama score hesaplama. Görsel: yazar.

Örnek 3: Kategoriye göre gruplayıp ortalama score hesaplama

import pandas as pd

# Convert to pandas for more complex grouping
df = table.to_pandas()
grouped = df.groupby('category')['score'].mean()
print(grouped)

Konsolda bir Arrow Tablosunu gruplamanın sonuçlarını gösteren görsel.

Arrow Tablosunu gruplama. Görsel: yazar.

pandas performansıyla karşılaştırma

İşte Apache Arrow ile pandas’ın hızlı bir karşılaştırması. Bu, büyük ölçekli analitik iş yüklerinde Arrow’un nerede öne çıktığını gösterir.

Özellik

Apache Arrow

Pandas

Bellek Formatı

Sütunlu, sıfır kopya, sıkı paketlenmiş

Satır tabanlı (içsel olarak NumPy dizileri kullanır)

Hız (Filtreleme, G/Ç)

SIMD ve vektörleştirme sayesinde daha hızlı

Büyük veride daha yavaş (kopyalar, Python döngüleri)

Bellek Kullanımı

Daha derli, verimli

Python ek yükü nedeniyle daha yüksek bellek kullanımı

Birlikte Çalışabilirlik

Mükemmel (diller/araçlar arasında paylaşımlı)

Çoğunlukla Python merkezli

Kullanım Durumu Uygunluğu

Büyük, analitik iş yükleri için optimize edilmiş

Küçük/orta veri ve prototipleme için harika

Serileştirme

Sıfır kopya desteğiyle Feather/Parquet

CSV/Excel, genellikle daha yavaş ve hacimli

Gördüğümüz üzere, Arrow Tabloları pandas ile iyi bütünleşir; özellikle join işlemleri yaparken. Bu konuda pandas ile verileri birleştirme kursunu inceleyin.

Apache Arrow’u Diğer Veri Araçlarıyla Entegre Etme

Arrow, diğer veri araçlarıyla iyi çalışabilir; bu da veriyi hızdan veya yapıdan ödün vermeden ortamlar arasında taşımayı kolaylaştırır.

Arrow’u pandas ile kullanma

Apache Arrow’da Table, pandas DataFrame’ine benzer; ikisi de eşit uzunlukta adlandırılmış sütunlar kullanır. Ancak Arrow Tabloları daha da ileri gider. İç içe sütunları destekler; böylece pandas’tan daha karmaşık veri yapılarını temsil edebilirsiniz.

Bununla birlikte, tüm dönüşümler sorunsuz değildir. Yine de Arrow ile pandas arasında dönüştürmek basittir. İşte nasıl:

Arrow Table → pandas DataFrame

table.to_pandas()

pandas DataFrame → Arrow Table

pa.Table.from_pandas(df)

Ve bu kadar! Sadece bir satır kod yeterli. 

Ayrıca Arrow ile pandas’ın Series gibi diğer yapılarıyla da çalışabilirsiniz. Daha fazlası için dokümanlara göz atın. Her iki araç da performans odaklı tasarımdan faydalanır—pandas ile verimli kod yazma kursunda daha fazlasını öğrenin.

Apache Spark ile çalışma

Apache Arrow, JVM (Java Virtual Machine) ile Python arasındaki veri alışverişini hızlandırmak için Spark’a yerleşik olarak gelir. Bu, pandas ve NumPy kullanıcıları için oldukça faydalıdır. Varsayılan olarak etkin değildir; dolayısıyla açmak için bazı ayarları değiştirmeniz gerekebilir. Ancak çalışır hâle geldiğinde Arrow performansı çeşitli şekillerde artırır:

  • Sütunlu format: Belleği daha verimli kullanır ve vektörleştirilmiş işlemleri destekler.
  • Sıfır kopya veri alışverişi: Tüm sütunlar Spark ile pandas arasında doğrudan paylaşılır; veri çoğaltması yoktur.
  • Daha düşük serileştirme yükü: Arrow olmadan, Spark DataFrame’lerini pandas’a dönüştürmek yavaş JVM-Python serileştirmesi içerir. Arrow bu adımı atlar.
  • Paralel işleme: Arrow, verileri parçalar hâlinde işlemeyi destekler; bu da Spark’ın dağıtık sistemiyle mükemmel uyum sağlar.

Başlamak için resmi PySpark ve Arrow kılavuzunu izleyin.

Makine öğrenmesi kütüphaneleriyle birlikte çalışabilirlik

Arrow, TensorFlow gibi makine öğrenmesi kütüphaneleriyle de iyi çalışır. 

Sütunlu formatı, makine öğrenmesi modellerini eğitmenin kilit adımları olan veri yükleme ve ön işlemeyi hızlandırır. Büyük veri kümelerini verimli şekilde ele alarak Arrow, farklı araçlarda daha hızlı eğitilen ve daha iyi çalışan ölçeklenebilir ML boru hatları kurmaya yardımcı olur.

Sonuç

Ve tamam! Apache Arrow’un temel fikirlerini ele aldık; onu daha geleneksel veri formatlarından ayıran noktaları, nasıl kurulacağını ve Python’da nasıl kullanılacağını gördük.

Ayrıca Arrow Array ve Tablo oluşturmak için uygulamalı örnekler inceledik ve Arrow’un yavaş serileştirmeyi atlatarak veri işlemeyi nasıl hızlı ve verimli tuttuğunu gördük.

Öğrenmeye devam etmek ve öğrendiklerimizin üzerine koymak istiyorsanız, sıradaki adımlar için harika kaynaklar:

Sırada nereye giderseniz gidin, Arrow’un daha temiz ve daha ölçeklenebilir iş akışları kurmanıza yardımcı olmasını umuyoruz!

SSS

Arrow ile Parquet arasındaki fark nedir?

Parquet, maksimum alan verimliliği için tasarlanmış bir depolama formatıdır; Arrow ise vektörleştirilmiş hesaplama çekirdekleri tarafından işlemeye yönelik bellek içi bir formattır.

Arrow, Protobuf ile nasıl ilişkilidir?

Google’ın protocol buffers kütüphanesi (Protobuf) bir “çalışma zamanı bellek içi formatı” değildir. Parquet gibi Protobuf’un temsili de işlemeye uygun değildir. İşlemek için verinin Arrow gibi bellek içi bir temsile serisi çözülmelidir.

Arrow, Flatbuffers ile nasıl ilişkilidir?

Arrow dosya formatı, Arrow ikili IPC protokolünü uygulamak için gereken şemaları ve diğer üstverileri serileştirmek üzere kaputun altında Flatbuffers kullanır; ancak Arrow veri formatı, en iyi erişim ve hesaplama için kendi temsilini kullanır.

Apache Arrow ücretsiz mi?

Evet, ücretsiz kullanabilirsiniz.

Apache Arrow gerçek zamanlı veri boru hatlarında kullanılabilir mi?

Evet, Apache Arrow gerçek zamanlı uygulamalar için oldukça uygundur. Sıfır kopya özellikleri ve paylaşımlı bellek modeli gecikmeyi azaltır; özellikle Apache Kafka veya Spark gibi araçlarla birlikte kullanıldığında.

Apache Arrow, Parquet ve Feather dosya formatlarıyla nasıl etkileşir?

Arrow bellek içidir; Parquet ve Feather ise disk üzerinde depolama formatlarıdır. Ancak Feather ve Parquet, Arrow ile uyumludur; bu da veriyi bellekten diske minimum ek yükle serileştirmeyi kolaylaştırır.

Apache Arrow, tüm veri işlemleri için pandas’tan daha mı iyi?

Her zaman değil. Arrow, hızlı, sütunlu, bellek içi işlem ve birlikte çalışabilirlikte öne çıkar; ancak pandas, karmaşık veri düzenleme için daha zengin özelliklere sahiptir. Performans ve diller arası paylaşım kritikse Arrow’u tercih edin.

Arrow Array’lerle NumPy dizileri arasındaki fark nedir?

Arrow Array’ler; null işleme gibi ek üstverileri destekler, değiştirilemezdir ve diller arası birlikte çalışabilirlik için tasarlanmıştır. NumPy dizileri ise değiştirilebilirdir ve Python merkezlidir.

Apache Arrow iç içe veya karmaşık veri türlerini destekler mi?

Evet. Arrow; listeler, yapılar (struct) ve birlikler (union) gibi iç içe türleri destekler; bu da analitik ve ML boru hatlarında yaygın olan karmaşık hiyerarşik veri yapılarını mümkün kılar.

Laiba Siddiqui

Yazar

Laiba Siddiqui

Karmaşık konuları basitleştirmeyi seven bir içerik stratejistiyim. Splunk, Hackernoon ve Tiiny Host gibi şirketlerin hedef kitleleri için ilgi çekici ve bilgilendirici içerikler üretmelerine yardımcı oldum.

Konular

İlgili