Skip to content

Feature: Implement zero-copy conversion from C++ ArFrame to Apache Arrow RecordBatch #2323

Description

@knoxiboy

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

  • C++ core implements the Arrow C Data Interface structure.
  • Python bindings expose a .to_arrow() method.
  • Unit tests verify zero-copy behavior and data integrity.

Alternatives considered

Exporting to Parquet to disk and reading back in, but disk I/O defeats the purpose of an in-memory pipeline.

Scope

  • pandas interoperability
  • Performance optimization
  • New pipeline step (C++)

Expected difficulty

  • Advanced

Additional context

References: Apache Arrow C Data Interface documentation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:cpp-coreC++ Frame, Column, pybind11, memory, and core engine internalsarea:integrationsIntegrations with pandas, NumPy, scikit-learn, DuckDB, Arrow, and notebooksdifficulty:advancedRequires deep C++/Python/runtime or architecture knowledgegssocPart of the GSSoC 2026 contributor programgssoc:level-3GSSoC advanced-level tasklevel:advancedGSSoC scoring label for advanced-level merged PRspriority:mediumUseful and planned, but not urgentsize:lLarge change that needs design or careful reviewstatus:needs-maintainerNeeds maintainer decision, review, reproduction, or design inputtype:featureGSSoC-compatible feature label

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions