-
-
Notifications
You must be signed in to change notification settings - Fork 386
Feature: Implement zero-copy conversion from C++ ArFrame to Apache Arrow RecordBatch #2323
Copy link
Copy link
Labels
area:cpp-coreC++ Frame, Column, pybind11, memory, and core engine internalsC++ Frame, Column, pybind11, memory, and core engine internalsarea:integrationsIntegrations with pandas, NumPy, scikit-learn, DuckDB, Arrow, and notebooksIntegrations with pandas, NumPy, scikit-learn, DuckDB, Arrow, and notebooksdifficulty:advancedRequires deep C++/Python/runtime or architecture knowledgeRequires deep C++/Python/runtime or architecture knowledgegssocPart of the GSSoC 2026 contributor programPart of the GSSoC 2026 contributor programgssoc:level-3GSSoC advanced-level taskGSSoC advanced-level tasklevel:advancedGSSoC scoring label for advanced-level merged PRsGSSoC scoring label for advanced-level merged PRspriority:mediumUseful and planned, but not urgentUseful and planned, but not urgentsize:lLarge change that needs design or careful reviewLarge change that needs design or careful reviewstatus:needs-maintainerNeeds maintainer decision, review, reproduction, or design inputNeeds maintainer decision, review, reproduction, or design inputtype:featureGSSoC-compatible feature labelGSSoC-compatible feature label
Description
Metadata
Metadata
Assignees
Labels
area:cpp-coreC++ Frame, Column, pybind11, memory, and core engine internalsC++ Frame, Column, pybind11, memory, and core engine internalsarea:integrationsIntegrations with pandas, NumPy, scikit-learn, DuckDB, Arrow, and notebooksIntegrations with pandas, NumPy, scikit-learn, DuckDB, Arrow, and notebooksdifficulty:advancedRequires deep C++/Python/runtime or architecture knowledgeRequires deep C++/Python/runtime or architecture knowledgegssocPart of the GSSoC 2026 contributor programPart of the GSSoC 2026 contributor programgssoc:level-3GSSoC advanced-level taskGSSoC advanced-level tasklevel:advancedGSSoC scoring label for advanced-level merged PRsGSSoC scoring label for advanced-level merged PRspriority:mediumUseful and planned, but not urgentUseful and planned, but not urgentsize:lLarge change that needs design or careful reviewLarge change that needs design or careful reviewstatus:needs-maintainerNeeds maintainer decision, review, reproduction, or design inputNeeds maintainer decision, review, reproduction, or design inputtype:featureGSSoC-compatible feature labelGSSoC-compatible feature label
Problem or motivation
Currently, handing off data from Arnio's C++ core to Python (e.g., Pandas) likely incurs expensive memory copying or serialization overhead. For large datasets (10GB+), this handoff is a severe bottleneck.
Proposed solution
Implement a zero-copy API that exports the internal C++ ArFrame directly to an Apache Arrow RecordBatch or Table using the Arrow C Data Interface.
User story
As a data engineer processing massive CSV files, I want Arnio to parse and clean the data in C++, and then pass it to Pandas/Polars via PyArrow without duplicating the data in RAM, so that I don't hit Out-Of-Memory (OOM) errors.
Acceptance criteria
Alternatives considered
Exporting to Parquet to disk and reading back in, but disk I/O defeats the purpose of an in-memory pipeline.
Scope
Expected difficulty
Additional context
References: Apache Arrow C Data Interface documentation.