Datasets documentation

Использование со Spark

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

Использование со Spark

Этот документ представляет собой краткое введение к использованию 🤗 Datasets с Spark, с особым акцентом на то, как загрузить Spark DataFrame в объект Dataset.

Оттуда у вас есть быстрый доступ к любому элементу, и вы можете использовать его как загрузчик данных для обучения моделей.

Загрузка из Spark

Объект Dataset представляет собой обёртку над таблицей Arrow, которая позволяет быстро считывать данные из массивов набора в тензоры PyTorch, TensorFlow и JAX. Таблица Arrow отображается в память с диска (memory-mapped), что позволяет загружать наборы данных, превышающие объём доступной оперативной памяти.

Вы можете получить Dataset из Spark DataFrame с помощью Dataset.from_spark():

>>> from datasets import Dataset
>>> df = spark.createDataFrame(
...     data=[[1, "Elia"], [2, "Teo"], [3, "Fang"]],
...     columns=["id", "name"],
... )
>>> ds = Dataset.from_spark(df)

Рабочие процессы Spark записывают набор данных на диск в каталог кэша в формате файлов Arrow, а Dataset загружается оттуда.

В качестве альтернативы можно пропустить материализацию, используя IterableDataset.from_spark(), который возвращает IterableDataset:

>>> from datasets import IterableDataset
>>> df = spark.createDataFrame(
...     data=[[1, "Elia"], [2, "Teo"], [3, "Fang"]],
...     columns=["id", "name"],
... )
>>> ds = IterableDataset.from_spark(df)
>>> print(next(iter(ds)))
{"id": 1, "name": "Elia"}

Кэширование

При использовании Dataset.from_spark() результирующий Dataset кэшируется; если вы несколько раз вызываете Dataset.from_spark() для одного и того же DataFrame, Spark-задача, записывающая датасет в виде файлов Arrow на диск, не будет выполняться повторно.

Вы можете указать расположение кэша, передав cache_dir= в Dataset.from_spark(). Убедитесь, что используете диск, доступный как вашим воркерам, так и текущей машине (драйверу).

В другой сессии у Spark DataFrame будет другой семантический хеш, поэтому Spark-задача будет выполнена заново, а её результат сохранён в новый кэш.

Типы признаков

Если ваш набор данных состоит из изображений, аудиоданных или N-мерных массивов, вы можете указать аргумент features= в Dataset.from_spark() (или IterableDataset.from_spark()):

>>> from datasets import Dataset, Features, Image, Value
>>> data = [(0, open("image.png", "rb").read())]
>>> df = spark.createDataFrame(data, "idx: int, image: binary")
>>> # Also works if you have arrays
>>> # data = [(0, np.zeros(shape=(32, 32, 3), dtype=np.int32).tolist())]
>>> # df = spark.createDataFrame(data, "idx: int, image: array<array<array<int>>>")
>>> features = Features({"idx": Value("int64"), "image": Image()})
>>> dataset = Dataset.from_spark(df, features=features)
>>> dataset[0]
{'idx': 0, 'image': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=32x32>}

Вы можете ознакомиться с документацией Features, чтобы узнать обо всех доступных типах признаков.

Update on GitHub