﻿1
00:00:00,000 --> 00:00:02,917
(transition music)

2
00:00:06,600 --> 00:00:08,283
- Saving and reloading a dataset.

3
00:00:09,210 --> 00:00:10,320
In this video, we'll take a look

4
00:00:10,320 --> 00:00:12,360
at saving a dataset in various formats

5
00:00:12,360 --> 00:00:14,660
and explore the ways to
reload the saved data.

6
00:00:17,310 --> 00:00:20,100
When you download a dataset,
the processing scripts and data

7
00:00:20,100 --> 00:00:22,470
are stored locally on your computer.

8
00:00:22,470 --> 00:00:24,000
The cache allows the Datasets library

9
00:00:24,000 --> 00:00:25,230
to avoid re-downloading

10
00:00:25,230 --> 00:00:28,620
or processing the entire
dataset every time you use it.

11
00:00:28,620 --> 00:00:31,170
Now, the data is stored in
the form of Arrow tables

12
00:00:31,170 --> 00:00:32,490
whose location can be found

13
00:00:32,490 --> 00:00:35,730
by accessing the dataset's
cache_files attribute.

14
00:00:35,730 --> 00:00:38,430
In this example, we've
downloaded the allocine dataset

15
00:00:38,430 --> 00:00:40,080
from the Hugging Face Hub, and you can see

16
00:00:40,080 --> 00:00:41,430
that there are three Arrow files

17
00:00:41,430 --> 00:00:43,473
stored in the cache, one for each split.

18
00:00:45,360 --> 00:00:47,460
But in many cases, you'll
wanna save your dataset

19
00:00:47,460 --> 00:00:49,890
in a different location or format.

20
00:00:49,890 --> 00:00:51,900
As shown in the table,
the Datasets library

21
00:00:51,900 --> 00:00:54,870
provides four main
functions to achieve this.

22
00:00:54,870 --> 00:00:56,130
Now, you're probably already familiar

23
00:00:56,130 --> 00:00:58,770
with the CSV and JSON formats,
both of which are great

24
00:00:58,770 --> 00:01:00,810
if you just wanna quickly save a small

25
00:01:00,810 --> 00:01:02,790
or medium-sized dataset.

26
00:01:02,790 --> 00:01:03,976
But if your dataset is huge,

27
00:01:03,976 --> 00:01:07,860
you'll wanna save it in either
the Arrow or Parquet formats.

28
00:01:07,860 --> 00:01:09,660
Arrow files are great
if you plan to reload

29
00:01:09,660 --> 00:01:11,850
or process the data in the near future.

30
00:01:11,850 --> 00:01:13,290
While Parquet files are designed

31
00:01:13,290 --> 00:01:16,140
for long-term storage and
are very space-efficient.

32
00:01:16,140 --> 00:01:18,140
Let's take a closer look at each format.

33
00:01:19,800 --> 00:01:21,750
To save a dataset or a dataset_dict object

34
00:01:21,750 --> 00:01:25,560
in the Arrow format, we use
the save_to_disk function.

35
00:01:25,560 --> 00:01:26,910
As you can see in this example,

36
00:01:26,910 --> 00:01:29,790
we simply provide the path
we wish to save the data to

37
00:01:29,790 --> 00:01:30,720
and the Datasets library

38
00:01:30,720 --> 00:01:32,340
will automatically create a directory

39
00:01:32,340 --> 00:01:35,790
for each split to store the
Arrow table and the metadata.

40
00:01:35,790 --> 00:01:37,680
Since we're dealing with
a dataset_dict object

41
00:01:37,680 --> 00:01:39,090
that has multiple splits,

42
00:01:39,090 --> 00:01:40,590
this information is also stored

43
00:01:40,590 --> 00:01:42,243
in the dataset_dict.json file.

44
00:01:44,250 --> 00:01:46,710
Now, when we wanna reload
the Arrow datasets,

45
00:01:46,710 --> 00:01:48,870
we use the load_from_disk function.

46
00:01:48,870 --> 00:01:51,210
We simply pass the path
of our dataset directory,

47
00:01:51,210 --> 00:01:53,583
and voila, the original
dataset is recovered.

48
00:01:55,594 --> 00:01:57,180
If we wanna save our dataset

49
00:01:57,180 --> 00:02:00,990
in the CSV format, we
use the to_csv function.

50
00:02:00,990 --> 00:02:02,280
In this case, you'll need to loop

51
00:02:02,280 --> 00:02:04,170
over the splits of the dataset_dict object

52
00:02:04,170 --> 00:02:07,710
and save each dataset as
an individual CSV file.

53
00:02:07,710 --> 00:02:10,950
Since the to_csv function is
based on the one from Pandas,

54
00:02:10,950 --> 00:02:13,980
you can pass keyword arguments
to configure the output.

55
00:02:13,980 --> 00:02:16,230
In this example, we've
set the index argument

56
00:02:16,230 --> 00:02:18,480
to None to prevent the
dataset's index column

57
00:02:18,480 --> 00:02:20,553
from being included in the CSV files.

58
00:02:22,470 --> 00:02:24,240
To reload our CSV files,

59
00:02:24,240 --> 00:02:27,180
we just then use the familiar
load_dataset function

60
00:02:27,180 --> 00:02:29,160
together with the CSV loading script

61
00:02:29,160 --> 00:02:30,360
and the data_files argument,

62
00:02:30,360 --> 00:02:34,020
which specifies the file names
associated with each split.

63
00:02:34,020 --> 00:02:35,400
As you can see in this example,

64
00:02:35,400 --> 00:02:37,320
by providing all the splits
and their file names,

65
00:02:37,320 --> 00:02:39,770
we've recovered the original
dataset_dict object.

66
00:02:41,880 --> 00:02:43,560
Now, to save a dataset in the JSON

67
00:02:43,560 --> 00:02:46,710
or Parquet formats is very
similar to the CSV case.

68
00:02:46,710 --> 00:02:49,890
We use either the to_json
function for JSON files

69
00:02:49,890 --> 00:02:52,740
or the to_parquet
function for Parquet ones.

70
00:02:52,740 --> 00:02:55,740
And just like the CSV case, we
need to loop over the splits

71
00:02:55,740 --> 00:02:57,753
to save each one as an individual file.

72
00:02:59,580 --> 00:03:02,940
And once our datasets are
saved as JSON or Parquet files,

73
00:03:02,940 --> 00:03:03,990
we can reload them again

74
00:03:03,990 --> 00:03:06,960
with the appropriate script
in the load_dataset function.

75
00:03:06,960 --> 00:03:09,993
And we just need to provide a
data_files argument as before.

76
00:03:10,860 --> 00:03:11,910
This example shows

77
00:03:11,910 --> 00:03:14,560
how we can reload our save
datasets in either format.

78
00:03:16,620 --> 00:03:17,970
And with that, you now know

79
00:03:17,970 --> 00:03:20,220
how to save your datasets
in various formats.

80
00:03:21,441 --> 00:03:24,358
(transition music)

