write_parquet ignores write_options when compression is a ParquetWriterOptions
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/datafusion-python
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
apache/datafusion-python#1757 ·
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/datafusion-python#1726 ·
-
Difficoltà 2/5 Mezza giornata Idoneità per principianti 88/100
apache/datafusion-python#1691 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/datafusion-python#1644 ·
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
apache/datafusion-python#1737 ·
Tutte le issue di apache/datafusion-python
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
-
hcocena Apertapolicies-accepted pre-review precheck-passed
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
Bioconductor/BiocContributions#214 · 5 commenti ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
TencentCloud/Octop#1169 · 1 commento ·
-
[开源推荐] 在老板拷问你之前,先让 AI 灵魂拷问你 Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
521xueweihan/HelloGitHub#3778 ·
-
The version checker's trailing attribute region has no control for a less-than inside a quoted value Apertaarea: dashboard area: tests bug perceived difficulty: 2 python
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
Nitjsefnie-Harness-Commons/daedalus#1105 · 1 commento ·