Indeed currently if you slice the dataset in some way (using shard, train_test_split or select for example), then under the hood the actual dataset isn’t changed, but instead an indices mapping is added to avoid having to rewrite a new arrow Table (save time + disk/memory usage). It maps the indices used by getitem to the right rows if the arrow Table.
By default save_to_disk does save the full dataset table + the mapping.
If you want to only save the shard of the dataset instead of the original arrow file + the indices, then you have to call flatten_indices first. It creates a new arrow table by using the right rows of the original table.
The current documentation is missing this, let me update it.