Know your dataset
Know your dataset
There are two types of dataset objects, a regular Dataset and then an β¨ IterableDataset β¨. A Dataset provides fast random access to the rows, and memory-mapping so that loading even large datasets only uses a relatively small amount of device memory. But for really, really big datasets that wonβt even fit on disk or in memory, an IterableDataset allows you to access and use the dataset without waiting for it to download completely!
This tutorial will show you how to load and access a Dataset and an IterableDataset.
Dataset
When you load a dataset split, youβll get a Dataset object. You can do many things with a Dataset object, which is why itβs important to learn how to manipulate and interact with the data stored inside.
This tutorial uses the rotten_tomatoes dataset, but feel free to load any dataset youβd like and follow along!
Copied
>>> from datasets import load_dataset
>>> dataset = load_dataset("rotten_tomatoes", split="train")Indexing
A Dataset contains columns of data, and each column can be a different type of data. The index, or axis label, is used to access examples from the dataset. For example, indexing by the row returns a dictionary of an example from the dataset:
Copied
# Get the first row in the dataset
>>> dataset[0]
{'label': 1,
'text': 'the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .'}Use the - operator to start from the end of the dataset:
Copied
Indexing by the column name returns a list of all the values in the column:
Copied
You can combine row and column name indexing to return a specific value at a position:
Copied
But it is important to remember that indexing order matters, especially when working with large audio and image datasets. Indexing by the column name returns all the values in the column first, then loads the value at that position. For large datasets, it may be slower to index by the column name first.
Copied
Slicing
Slicing returns a slice - or subset - of the dataset, which is useful for viewing several rows at once. To slice a dataset, use the : operator to specify a range of positions.
Copied
IterableDataset
An IterableDataset is loaded when you set the streaming parameter to True in load_dataset():
Copied
You can also create an IterableDataset from an existing Dataset, but it is faster than streaming mode because the dataset is streamed from local files:
Copied
An IterableDataset progressively iterates over a dataset one example at a time, so you donβt have to wait for the whole dataset to download before you can use it. As you can imagine, this is quite useful for large datasets you want to use immediately!
However, this means an IterableDatasetβs behavior is different from a regular Dataset. You donβt get random access to examples in an IterableDataset. Instead, you should iterate over its elements, for example, by calling next(iter()) or with a for loop to return the next item from the IterableDataset:
Copied
You can return a subset of the dataset with a specific number of examples in it with IterableDataset.take():
Copied
But unlike slicing, IterableDataset.take() creates a new IterableDataset.
Next steps
Interested in learning more about the differences between these two types of datasets? Learn more about them in the Differences between Dataset and IterableDataset conceptual guide.
To get more hands-on with these datasets types, check out the Process guide to learn how to preprocess a Dataset or the Stream guide to learn how to preprocess an IterableDataset.
Last updated