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

write_parquet ignores write_options when compression is a ParquetWriterOptions

Abierto Apto para principiantes
#1,760 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
data

Línea de trabajo

Comienza con la rama de DataFrame.write_parquet mostrada para ParquetWriterOptions y compara su delegación con write_parquet_with_options. Reproduce el caso de particionamiento usando DataFrameWriteOptions y, después, verifica que la prueba de regresión y las pruebas existentes de write-parquet pasan con partition_by y las demás opciones reenviados.

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

Descripción

Describe the bug

DataFrame.write_parquet accepts write_options: DataFrameWriteOptions | None, documents it ("Options that impact how the DataFrame is written") and declares it in the @overload for the ParquetWriterOptions form. But that branch delegates without forwarding it:

if isinstance(compression, ParquetWriterOptions):
    if compression_level is not None:
        msg = "compression_level should be None when using ParquetWriterOptions"
        raise ValueError(msg)
    self.write_parquet_with_options(path, compression)   # write_options dropped
    return

write_parquet_with_options(path, options, write_options=None) takes the parameter, so everything in DataFrameWriteOptions (partition_by, single_file_output, insert_operation, sort_by) is silently ignored whenever the compression argument is a ParquetWriterOptions. No error, no warning: the files just land in the wrong layout.

To Reproduce

import tempfile, pathlib
from datafusion import SessionContext
from datafusion.dataframe import ParquetWriterOptions, DataFrameWriteOptions

ctx = SessionContext()
df = ctx.from_pydict({"part": ["a", "a", "b"], "v": [1, 2, 3]})
wo = lambda: DataFrameWriteOptions(partition_by="part")

with tempfile.TemporaryDirectory() as d:
    out = pathlib.Path(d) / "x"
    df.write_parquet(out, ParquetWriterOptions(), write_options=wo())
    print(sorted(p.name for p in out.iterdir()))

Measured with datafusion 54.0.0:

write_parquet(ParquetWriterOptions, write_options)   ['IDuOjvMa3pdEDotb_0.parquet']   <-- not partitioned
write_parquet_with_options(..., write_options)       ['part=a', 'part=b']
write_parquet('zstd', write_options)                 ['part=a', 'part=b']

Same DataFrameWriteOptions in all three calls; only the ParquetWriterOptions branch loses the Hive partitioning.

Expected behavior

The Hive partitioning, and the rest of write_options, should be applied, exactly as the other two spellings already do: ['part=a', 'part=b'].

Additional context

The branch was added in ef62fa89 (#1169, "Add compression_level support to ParquetWriterOptions and enhance write_parquet to accept full options object"), while write_options came earlier in #857, so the new delegation path was written without carrying over the existing parameter. Note that the same if explicitly refuses compression_level with a ValueError, so incompatible arguments in this branch are rejected on purpose when intended; write_options was not refused, just not passed along.

I have a one-line fix plus a regression test ready and will open a PR against this issue.

Lenguaje dominante
Python
Estrellas
605
Forks
176
Merge medio
1 d 23 h
PR fusionados (30 d)
9

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/datafusion-python

Todos los issues de apache/datafusion-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.