Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

write_parquet ignores write_options when compression is a ParquetWriterOptions

Aperta Adatta ai principianti
#1,760 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
data

Direzione di ricerca

Inizia dal ramo DataFrame.write_parquet mostrato per ParquetWriterOptions e confronta la relativa delega con write_parquet_with_options. Riproduci il caso di partizionamento usando DataFrameWriteOptions, quindi verifica che il test di regressione e i test write-parquet esistenti abbiano esito positivo con partition_by e le altre opzioni inoltrate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Python
Stelle
605
Fork
176
Merge medio
1g 23h
PR unite (30g)
9

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/datafusion-python

Tutte le issue di apache/datafusion-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.