Datasets documentation

Usar com 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

Usar com Spark

Este documento é uma introdução rápida ao uso do 🤗 Datasets com Spark, com foco especial em como carregar um DataFrame do Spark em um objeto Dataset.

A partir daí, você tem acesso rápido a qualquer elemento e pode usá-lo como um carregador de dados para treinar modelos.

Carregar do Spark

Um objeto Dataset é um wrapper de uma tabela Arrow, que permite leituras rápidas de arrays no dataset para tensores do PyTorch, TensorFlow e JAX. A tabela Arrow é mapeada na memória a partir do disco, o que permite carregar datasets maiores que a sua RAM disponível.

Você pode obter um Dataset a partir de um DataFrame do 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)

Os workers do Spark gravam o conjunto de dados em um diretório de cache no disco como arquivos Arrow, e o Dataset é carregado a partir de lá.

Alternativamente, você pode pular a materialização usando IterableDataset.from_spark(), que retorna um 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"}

Cache

Ao usar Dataset.from_spark(), o Dataset resultante é armazenado em cache; se você chamar Dataset.from_spark() várias vezes no mesmo DataFrame, o trabalho do Spark que grava o dataset como arquivos Arrow no disco não será reexecutado.

Você pode definir o local do cache passando cache_dir= para Dataset.from_spark(). Certifique-se de usar um disco que esteja disponível tanto para seus workers quanto para sua máquina atual (o driver).

Em uma sessão diferente, um DataFrame do Spark não possui o mesmo hash semântico e reexecutará um trabalho do Spark, armazenando-o em um novo cache.

Tipos de recursos

Se o seu conjunto de dados é composto por imagens, dados de áudio ou arrays N-dimensionais, você pode especificar o argumento features= em Dataset.from_spark() (ou 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>}

Você pode consultar a documentação de Features para conhecer todos os tipos de recursos disponíveis.

Update on GitHub