Datasets documentation

Uso con 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

Uso con Spark

Este documento es una introducción rápida al uso de 🤗 Datasets con Spark, con un enfoque particular en cómo cargar un DataFrame de Spark en un objeto Dataset.

A partir de ahí, tienes acceso rápido a cualquier elemento y puedes usarlo como un cargador de datos para entrenar modelos.

Cargar desde Spark

Un objeto Dataset es un envoltorio de una tabla Arrow, que permite lecturas rápidas desde los arrays del dataset hacia tensores de PyTorch, TensorFlow y JAX. La tabla Arrow se mapea en memoria desde el disco, lo que permite cargar datasets más grandes que la RAM disponible.

Puedes obtener un Dataset desde un DataFrame de Spark usando 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)

Los workers de Spark escriben el conjunto de datos en el disco en un directorio de caché como archivos Arrow, y el Dataset se carga desde allí.

Alternativamente, puede omitir la materialización usando IterableDataset.from_spark(), que devuelve un 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"}

Caché

Al usar Dataset.from_spark(), el Dataset resultante se almacena en caché; si se llama a Dataset.from_spark() varias veces sobre el mismo DataFrame, no se volverá a ejecutar el trabajo de Spark que escribe el conjunto de datos como archivos Arrow en el disco.

Puede establecer la ubicación de la caché pasando cache_dir= a Dataset.from_spark(). Asegúrese de usar un disco que esté disponible tanto para sus workers como para su máquina actual (el driver).

En una sesión diferente, un DataFrame de Spark no tiene el mismo hash semántico y se volverá a ejecutar un trabajo de Spark y se almacenará en una nueva caché.

Tipos de características

Si su conjunto de datos está compuesto por imágenes, datos de audio o matrices de N dimensiones, puede especificar el argumento features= en Dataset.from_spark() (o 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>}

Puede consultar la documentación de Features para conocer todos los tipos de características disponibles.

Update on GitHub