Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

write_parquet ignores write_options when compression is a ParquetWriterOptions

Ouverte Adaptée aux débutants
#1,760 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
data

Piste de recherche

Commencez par la branche DataFrame.write_parquet présentée pour ParquetWriterOptions et comparez sa délégation avec write_parquet_with_options. Reproduisez le cas de partitionnement à l’aide de DataFrameWriteOptions, puis vérifiez que le test de régression et les tests write-parquet existants passent avec partition_by et les autres options transmis.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
Python
Étoiles
605
Forks
176
Merge moyen
1 j 23 h
PR mergées (30 j)
9

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de apache/datafusion-python

Toutes les issues de apache/datafusion-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.