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 (v5.2.0).
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 表通过内存映射从磁盘加载,因此可以加载比可用 RAM 更大的数据集。

您可以使用 Dataset.from_spark() 从 Spark DataFrame 获取 Dataset:

>>> 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 会被缓存;如果对同一个 DataFrame 多次调用 Dataset.from_spark(),不会重新运行将数据集作为 Arrow 文件写入磁盘的 Spark 作业。

您可以通过向 Dataset.from_spark() 传递 cache_dir= 来设置缓存位置。 请确保使用对您的工作节点和当前机器(即 driver)均可访问的磁盘。

在另一个会话中,Spark DataFrame 不会具有相同的 语义哈希,因此它会重新运行 Spark 作业并将其存储在新的缓存中。

特征类型

如果您的数据集由图像、音频数据或 N 维数组组成,您可以在 Dataset.from_spark()(或 IterableDataset.from_spark())中指定 features= 参数:

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