write_parquet ignores write_options when compression is a ParquetWriterOptions
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
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
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/datafusion-python
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
apache/datafusion-python#1765 ·
Mantenedores costumam responder em até 9 dias
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
apache/datafusion-python#1757 ·
Mantenedores costumam responder em até 9 dias
-
documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
apache/datafusion-python#1726 ·
Mantenedores costumam responder em até 9 dias
-
Dificuldade 2/5 Meio dia Facilidade para iniciantes 88/100
apache/datafusion-python#1691 ·
Mantenedores costumam responder em até 9 dias
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
apache/datafusion-python#1644 ·
Mantenedores costumam responder em até 9 dias
Todas as issues de apache/datafusion-python
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
solana-foundation/pay-kit#341 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
nasa/python_cmr#123 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 92/100
EleutherAI/lm-evaluation-harness#4243 ·
Mantenedores costumam responder em até 1 dia
-
area: dashboard bug perceived difficulty: 3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Nitjsefnie-Harness-Commons/daedalus#1179 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
cusp-ai-oss/tojax#17 ·