Datasets documentation

PyArrow ile kullanma

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PyArrow ile kullanma

Bu belge, datasets kütüphanesinin PyArrow ile kullanımına hızlı bir giriş niteliğindedir; odak noktası, veri setlerini Arrow hesaplama işlevleri ile işleme ve bir veri setini PyArrow'a dönüştürme veya PyArrow'dan alma konusudur.

Bu özellikle faydalıdır çünkü datasets alt yapısında PyArrow kullandığı için hızlı sıfır kopyalama işlemlerine olanak tanır.

Veri seti biçimi

Varsayılan olarak veri kümeleri, tamsayılar, ondalık sayılar, dizeler, listeler gibi standart Python nesneleri döndürür.

Bunun yerine PyArrow Tabloları veya Dizileri almak için, veri setinin biçimini Dataset.with_format() kullanarak pyarrow olarak ayarlayabilirsiniz:

>>> from datasets import Dataset
>>> data = {"col_0": ["a", "b", "c", "d"], "col_1": [0., 0., 1., 1.]}
>>> ds = Dataset.from_dict(data)
>>> ds = ds.with_format("arrow")
>>> ds[0]       # pa.Table
pyarrow.Table
col_0: string
col_1: double
----
col_0: [["a"]]
col_1: [[0]]
>>> ds[:2]      # pa.Table
pyarrow.Table
col_0: string
col_1: double
----
col_0: [["a","b"]]
col_1: [[0,0]]
>>> ds["data"]  # pa.array
<pyarrow.lib.ChunkedArray object at 0x1394312a0>
[
  [
    "a",
    "b",
    "c",
    "d"
  ]
]

Bu, örneğin load_dataset(..., streaming=True) kullanılarak elde edilen IterableDataset nesneleri için de geçerlidir:

>>> ds = ds.with_format("arrow")
>>> for table in ds.iter(batch_size=2):
...     print(table)
...     break
pyarrow.Table
col_0: string
col_1: double
----
col_0: [["a","b"]]
col_1: [[0,0]]

Verileri işleyin

PyArrow işlevleri genel olarak elle yazılmış standart python işlevlerinden daha hızlıdır ve bu nedenle veri işleme optimizasyonu için iyi bir seçenektir. Bir veri setini Dataset.map() veya Dataset.filter() içinde işlemek için Arrow compute işlevlerini kullanabilirsiniz:

>>> import pyarrow.compute as pc
>>> from datasets import Dataset
>>> data = {"col_0": ["a", "b", "c", "d"], "col_1": [0., 0., 1., 1.]}
>>> ds = Dataset.from_dict(data)
>>> ds = ds.with_format("arrow")
>>> ds = ds.map(lambda t: t.append_column("col_2", pc.add(t["col_1"], 1)), batched=True)
>>> ds[:2]
pyarrow.Table
col_0: string
col_1: double
col_2: double
----
col_0: [["a","b"]]
col_1: [[0,0]]
col_2: [[1,1]]
>>> ds = ds.filter(lambda t: pc.equal(t["col_0"], "b"), batched=True)
>>> ds[0]
pyarrow.Table
col_0: string
col_1: double
col_2: double
----
col_0: [["b"]]
col_1: [[0]]
col_2: [[1]]

PyArrow'da veri satır satır işlemek yerine partiler halinde işlemek daha hızlı olduğu için batched=True kullanıyoruz. Ayrıca map() içinde batch_size= parametresini kullanarak her bir table için boyutu ayarlamak da mümkündür.

Bu, IterableDataset.map() ve IterableDataset.filter() için de geçerlidir.

PyArrow'dan İçe Aktarma veya Dışa Aktarma

Dataset, bir PyArrow Table sarmalayıcısıdır; bir Dataset'i doğrudan Table'dan oluşturabilirsiniz:

ds = Dataset(table)

Bir veri setinin PyArrow Table'ına Dataset.data ile erişebilirsiniz; bu, Arrow verisinin kaynağına ve uygulanan işlemlere bağlı olarak bir MemoryMappedTable, bir InMemoryTable veya bir ConcatenationTable döndürür.

Bu nesneler, Dataset.data.table adresinde erişilebilen alttaki PyArrow tablosunu sarmalar. Bu tablo, veri setinin tüm verilerini içerir; ancak veri satırı indekslerini PyArrow Tablo satır indekslerine eşleyen bir indeks eşlemesi de Dataset._indices adresinde bulunabilir. Bu durum, veri seti Dataset.shuffle() ile karıştırıldığında veya satırların yalnızca bir alt kümesi kullanıldığında (ör. Dataset.select() sonrasında) ortaya çıkabilir.

Genel durumda, bir veri setini table = ds.with_format("arrow")[:] kullanarak PyArrow Table olarak dışa aktarabilirsiniz.

Update on GitHub