Registry / data / arro3-io

arro3-io

JSON →
library0.8.1pypypi✓ verified 85d ago

arro3-io is a Python library that provides streaming-capable readers and writers for various Apache Arrow-compatible data formats, including Parquet, Arrow IPC, JSON, and CSV. It is an integral part of the `arro3` ecosystem, which aims to be a minimal Python interface to Apache Arrow's Rust implementation, offering a more lightweight alternative to PyArrow. The library emphasizes a streaming-first approach, enabling efficient processing of larger-than-memory datasets through lazy iterators. It is actively maintained, with the current version being 0.8.0, and integrates seamlessly with other Python data libraries that implement the Arrow PyCapsule Interface.

pip install arro3-io
INSTALL
IMPORT
SIG · ARRO3-IO
A
arro3-io
datapythonv0.8.1
Install
2.3s avg
Import
Disk
62MB
Pass rate
10/ 10
Env Coverage10 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v0.8.1 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.940 runs
installs and imports cleanly · install 0.0s · import 0.000s · 64.9MB
glibc
py 3.103.940 runs
installs and imports cleanly · install 2.3s · import 0.000s · 64MB
62MB installed
● package 62MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

read_parquet
from arro3.io import read_parquet
write_parquet
from arro3.io import write_parquet
read_ipc
from arro3.io import read_ipc
write_ipc
from arro3.io import write_ipc
Table
from arro3.core import Table
from arro3.io import Table
`Table` is a core data structure provided by `arro3-core`, not directly by `arro3-io`.

This quickstart demonstrates how to use `arro3-io` to write and read Apache Arrow-compatible data. It showcases the creation of data using Pandas and PyArrow, writing it to an in-memory buffer using `arro3.io.write_parquet`, then reading it back with `arro3.io.read_parquet`. The streaming `RecordBatchReader` is then materialized into an `arro3.core.Table`, and finally converted back to PyArrow and Pandas to highlight interoperability.

import arro3.io import arro3.core import pyarrow as pa import pandas as pd import io # 1. Create some dummy data using pandas and pyarrow df = pd.DataFrame({"col1": [1, 2, 3], "col2": ["A", "B", "C"]}) pa_table = pa.Table.from_pandas(df) # 2. Write the data to an in-memory buffer as a Parquet file using arro3.io buffer = io.BytesIO() arro3.io.write_parquet(pa_table, buffer) buffer.seek(0) # 3. Read the Parquet data back from the buffer using arro3.io # arro3.io.read_parquet returns a RecordBatchReader (an iterator) reader = arro3.io.read_parquet(buffer) # 4. Materialize the streaming RecordBatchReader into an arro3.core.Table arro3_table = arro3.core.Table(reader) print("Original Pandas DataFrame:") print(df) print("\narro3 Table read back:") print(arro3_table) # 5. Demonstrate interoperability by converting the arro3.core.Table back to PyArrow and Pandas print("\narro3 Table converted to PyArrow Table:") print(arro3_table.to_pyarrow()) print("\narro3 Table converted to Pandas DataFrame:") print(arro3_table.to_pandas())
Debug
Known issues
breakingIn version 0.8.0, the serialization of a bare `DataType` through `__arrow_c_schema__` (e.g., when passing to `pyarrow.field`) now explicitly sets `nullable: true` to match PyArrow's equality semantics.
fix
Review code that relies on explicit nullability assumptions when interacting with `DataType` objects passed between `arro3` and `pyarrow`. Ensure your code handles `nullable: true` for bare `DataType` objects where applicable.
affects: 0.7.x to 0.8.0
gotchaThe `arro3` project is distributed as modular namespace packages (`arro3-core`, `arro3-io`, `arro3-compute`). While `arro3-io` handles I/O, core Arrow data structures like `Table` or `RecordBatch` are provided by `arro3-core`. Users often need to install and import from `arro3-core` for full functionality.
fix
Ensure you install `arro3-core` alongside `arro3-io` (`pip install arro3-core arro3-io`) and import core data structures from `arro3.core` (e.g., `from arro3.core import Table`).
affects: All versions
gotcha`arro3.io`'s read functions (e.g., `read_parquet`) return a `RecordBatchReader`, which is a lazy iterator. If you need to work with the entire dataset in memory, you must explicitly materialize it.
fix
To materialize the data, call `.read_all()` on the `RecordBatchReader` or pass the reader directly to `arro3.core.Table()` (e.g., `table = arro3.core.Table(reader)`).
affects: All versions
Errors
Common errors & fixes
ModuleNotFoundError: No module named 'arrow3.io'
The package name is `arro3-io` (with two 'r's) and its modules are under the `arro3` namespace, not `arrow3`.
fix
Change your import statement from `import arrow3.io` to `import arro3.io`. Ensure you have installed the correct package: `pip install arro3-io`.
AttributeError: module 'arro3.io' has no attribute 'Table'
The `Table` class, a fundamental Arrow data structure, is provided by the `arro3-core` package, not `arro3-io`.
fix
Import `Table` from `arro3.core`: `from arro3.core import Table`. You may also need to install `arro3-core` if you haven't already: `pip install arro3-core`.
TypeError: 'RecordBatchReader' object is not subscriptable
You are attempting to access a `RecordBatchReader` (which is an iterator) like a list or array before materializing its contents.
fix
Materialize the `RecordBatchReader` into a `Table` or iterate over it. For example, `table = arro3.core.Table(reader)` or `for batch in reader: ...`.
Upgrade
Version history
0.8.1latest on PyPI · released Jun 11, 2026
Audit
Dependencies
arro3-corerequiredProvides core Arrow data structures (Table, RecordBatch) which arro3-io operates on; part of the same namespace package.
pyarrowoptionalOften used for creating/consuming Arrow data compatible with arro3-io, though not strictly required as arro3-io can interoperate with any Arrow PyCapsule-compliant library.
pandasoptionalCommonly used for data manipulation and converting to/from Arrow formats for use with arro3-io.
Agent activity
40 hits · last 30 days
node
34
OpenAI (training)
1
Resources
arro3-io — pip install arro3-io · libregistry