Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

write_parquet ignores write_options when compression is a ParquetWriterOptions

Aberta Para iniciantes
#1,760 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 9 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
78/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
data

Direção de pesquisa

Comece pelo branch de DataFrame.write_parquet mostrado para ParquetWriterOptions e compare sua delegação com write_parquet_with_options. Reproduza o caso de particionamento usando DataFrameWriteOptions e, em seguida, verifique se o teste de regressão e os testes existentes de write-parquet passam com partition_by e as outras opções encaminhados.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Python
Estrelas
605
Forks
176
Merge médio
1d 23h
PRs com merge (30d)
9

Preparar o ambiente

Ainda não verificamos os arquivos de configuração deste projeto. Comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de apache/datafusion-python

Todas as issues de apache/datafusion-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.