Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

IO: Consolidate PyArrow logic into io/pyarrow.py before decomposition

Abierto
#3,812 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
55/100
Tipo de issue
Refactorización
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python
Área
backend

Línea de trabajo

Comienza comparando table/upsert_util.py con pyiceberg/io/pyarrow.py y revisando la discusión relacionada en #3737. Enfócate primero en PR A; terminado significa que la lógica de PyArrow de la utilidad de upsert pasa por io/pyarrow.py, sin cambios de comportamiento y con todas las pruebas existentes pasando.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

Before decomposing pyiceberg/io/pyarrow.py into focused submodules (#3737, #3738), we should consolidate PyArrow-specific logic that currently lives outside the module. This ensures all PyArrow calls route through a single boundary, making the subsequent split clean and enabling future engine substitution.

Motivation

Per discussion in #3737, @rambleraptor noted that the first useful step is ensuring no PyArrow logic occurs outside pyarrow.py. Currently several modules import pyarrow directly and implement compute logic inline rather than delegating through pyiceberg.io.pyarrow.

When we later introduce a ComputeEngine protocol, any PyArrow logic outside the module boundary bypasses the protocol and prevents clean substitution.

Audit

Grepped pyiceberg/ (excluding io/pyarrow.py and tests) for runtime import pyarrow statements (both top-level and inline). Excluded TYPE_CHECKING-only imports since those have no runtime dependency.

Location What it does Action
table/upsert_util.py PyArrow table joins, group_by, compute, cast, take Absorb
table/inspect.py Builds pa.schema + pa.Table.from_pylist for metadata inspection TBD
transforms.py pyarrow_transform() dispatch on pa.Array/ChunkedArray TBD
table/__init__.py Entry points accept pa.Table, delegate to io.pyarrow Leave
table/deletion_vector.py Single pa.chunked_array() call Leave
catalog/__init__.py Delegates to io.pyarrow for schema conversion Leave

Plan

One PR per absorption. Each is a pure refactor: move code into io/pyarrow.py, have the caller import from pyiceberg.io.pyarrow instead of pyarrow directly. No behavior change, all existing tests pass unchanged.

  • PR A: Absorb table/upsert_util.py PyArrow logic
  • PR B: table/inspect.py (pending discussion)
  • PR C: transforms.py (pending discussion)

Related

  • #3737 - Decompose io/pyarrow.py into focused modules
  • #3738 - Extract PyArrowFileIO (first decomposition step)
  • #3715 / #3716 - Previous pluggable backend attempt (rejected as too large)
Lenguaje dominante
Python
Estrellas
1.1k
Forks
589
Merge medio
1 d 20 h
PR fusionados (30 d)
68

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/iceberg-python

Todos los issues de apache/iceberg-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.