Dataset Export Methods
This page documents methods for exporting dataset data to various formats.
Table of Contents
ds.to_dataframe()
Overview
Convert the dataset to a pandas DataFrame. This is useful for data analysis and integration with pandas-based workflows.
Signature
ds.to_dataframe(
tensor_list=None,
index_list=None,
force=False,
)
Parameters
- tensor_list (
List[str], optional): The tensor columns to export. If not provided, all tensors will be exported. Defaults toNone. - index_list (
List[int], optional): The indices of rows to export. If not provided, all rows will be exported. Defaults toNone. - force (
bool, optional): IfTrue, exports the dataset regardless of size. Datasets with more thanTO_DATAFRAME_SAFE_LIMITsamples might take a long time to export. Defaults toFalse.
Returns
- pandas.DataFrame: The dataset as a pandas DataFrame.
Examples
import muller
ds = muller.load("./my_dataset")
# Export entire dataset to DataFrame
df = ds.to_dataframe()
print(df.head())
# Export specific tensors
df = ds.to_dataframe(tensor_list=["images", "labels"])
# Export specific rows
df = ds.to_dataframe(index_list=[0, 1, 2, 10, 20])
# Export specific tensors and rows
df = ds.to_dataframe(
tensor_list=["labels", "categories"],
index_list=[1, 2, 4, 8, 16]
)
# Export last few samples
df = ds.to_dataframe(index_list=[-1, -2, -3])
# Force export of large dataset
df = ds.to_dataframe(force=True)
# Use DataFrame for analysis
df = ds.to_dataframe()
print(df.describe())
print(df["labels"].value_counts())
Notes
- For large datasets, consider using
index_listto export in batches. - Image and large binary data will be represented as arrays in the DataFrame.
- Use
force=Truecarefully with large datasets as it may consume significant memory.
ds.to_json()
Overview
Export the dataset to a JSON or JSONL file, row by row.
Signature
ds.to_json(
path,
tensors=None,
num_workers=1,
)
Parameters
- path (
str): Output file path. The filename must end with.jsonor.jsonl. - tensors (
List[str], optional): Tensor columns to export. If not provided, all tensors are exported. Defaults toNone. - num_workers (
int, optional): Number of worker processes used to convert dataset slices before writing. Must be greater than0. Defaults to1.
Returns
- None
Examples
import muller
ds = muller.load("./my_dataset")
# Export to JSON file
ds.to_json("./output/dataset.json")
# Export to JSONL file
ds.to_json("./output/dataset.jsonl")
# Export specific tensors
ds.to_json("./output/labels_only.json", tensors=["labels"])
# Use multiple workers
ds.to_json("./output/dataset.jsonl", num_workers=4)
# Export filtered view
filtered = ds.filter("labels == 5")
filtered.to_json("./output/label_5_samples.json")
Notes
to_json()writes to a file and does not return a JSON string.- The current API does not accept
index_listorindent. Slice/filter the dataset before callingto_json()if you need a subset of rows.
ds.to_arrow()
Overview
Create a MULLER-backed Arrow Dataset object. Use its Arrow Dataset methods, such as to_table(), scanner(), head(), and count_rows(), to materialize or inspect data.
Signature
ds.to_arrow()
Parameters
None
Returns
- MULLERArrowDataset: A
pyarrow.dataset.Datasetsubclass backed by the MULLER dataset.
Examples
import muller
ds = muller.load("./my_dataset")
# Create an Arrow Dataset wrapper
arrow_ds = ds.to_arrow()
print(arrow_ds.schema)
# Convert to Arrow Table
arrow_table = arrow_ds.to_table()
print(arrow_table.schema)
# Export specific columns
arrow_table = arrow_ds.to_table(columns=["labels", "features"])
# Write to Parquet using Arrow
import pyarrow.parquet as pq
pq.write_table(arrow_table, "./output/dataset.parquet")
# Convert to pandas via Arrow
df = arrow_table.to_pandas()
# Inspect the first rows
preview = arrow_ds.head(10)
Notes
- Supported Arrow conversions are defined by tensor htype/dtype. Unsupported combinations raise
UnsupportedArrowConvertError. - Use Arrow Dataset methods to choose columns or materialize a table;
ds.to_arrow()itself does not accepttensor_listorindex_list.
ds.to_mindrecord()
Overview
Export the dataset to MindRecord format, which is used by MindSpore framework. This is useful for training models with MindSpore.
Signature
ds.to_mindrecord(
file_name,
shard_num=1,
batch_size=100000,
overwrite=False,
scheduler="threaded",
)
Parameters
- file_name (
str): Output MindRecord filename. - shard_num (
int, optional): Number of MindRecord files to generate. Defaults to1. - batch_size (
int, optional): Batch size used when reading NumPy data from MULLER. Defaults to100000. - overwrite (
bool, optional): IfTrue, overwrite existing files with the same name. Defaults toFalse. - scheduler (
str, optional): Scheduler used while reading tensor batches. Supported values include"serial","threaded","processed", and"distributed". Defaults to"threaded".
Returns
- None
Examples
import muller
ds = muller.load("./my_dataset")
# Export to MindRecord
ds.to_mindrecord("./output/dataset.mindrecord")
# Export with multiple shards
ds.to_mindrecord("./output/dataset.mindrecord", shard_num=8)
# Export a subset by slicing first
train_subset = ds[:1000]
train_subset.to_mindrecord(
"./output/train_subset.mindrecord",
batch_size=1000,
)
# Overwrite existing files
ds.to_mindrecord(
"./output/dataset.mindrecord",
overwrite=True,
)
# Choose a scheduler
ds.to_mindrecord(
"./output/dataset.mindrecord",
scheduler="threaded",
)
# Export filtered view
train_ds = ds.filter("split == 'train'")
train_ds.to_mindrecord("./output/train.mindrecord", shard_num=4)
Notes
- MindRecord format is optimized for MindSpore training workflows.
- Multiple shards can improve parallel data loading performance.
- Requires MindSpore to be installed.
- The current API exports the dataset's tensors as a whole and does not accept
tensor_listorindex_list. Slice/filter the dataset before exporting a row subset.
ds.write_to_parquet()
Overview
Write the dataset to Parquet format through the dataset's storage backend.
Signature
ds.write_to_parquet(path, columns=None)
Parameters
- path (
str): Storage key/path where the Parquet bytes will be written. - columns (
List[str], optional): Columns to include in the Parquet output. If omitted, all columns are exported. Defaults toNone.
Returns
- None
Examples
import muller
ds = muller.load("./my_dataset")
# Write to Parquet
ds.write_to_parquet("./output/dataset.parquet")
# Write specific tensors
ds.write_to_parquet(
"./output/labels_only.parquet",
columns=["labels", "categories"]
)
# Write a subset by slicing first
ds[:1000].write_to_parquet("./output/sample_subset.parquet")
# Write filtered view
filtered = ds.filter("score > 80")
filtered.write_to_parquet("./output/high_scores.parquet")
# Write multiple partitions
train_ds = ds.filter("split == 'train'")
test_ds = ds.filter("split == 'test'")
train_ds.write_to_parquet("./output/train.parquet")
test_ds.write_to_parquet("./output/test.parquet")
Notes
- Parquet format is highly efficient for columnar data access.
- Parquet files can be read by many tools including pandas, Spark, and DuckDB.
- The current API does not expose compression, row group size, or row index parameters. Use
to_arrow().to_table()with PyArrow directly if you need those writer options.
Comparison of Export Formats
| Format | Use Case | Pros | Cons |
|---|---|---|---|
| DataFrame | Data analysis, pandas workflows | Easy to use, familiar API | Memory intensive for large datasets |
| JSON | Data interchange, human-readable | Universal format, readable | Large file size, slower parsing |
| Arrow | Interoperability, efficient transfer | Fast, zero-copy, language-agnostic | Requires Arrow ecosystem |
| MindRecord | MindSpore training | Optimized for MindSpore | MindSpore-specific |
| Parquet | Analytics, data warehousing | Efficient, columnar, widely supported | Not human-readable |
Choosing the Right Format
- Use to_dataframe() for quick analysis and pandas integration
- Use to_json() for data interchange and human readability
- Use to_arrow() for efficient data transfer and Arrow ecosystem integration
- Use to_mindrecord() for MindSpore model training
- Use write_to_parquet() for efficient storage and analytics workflows