You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ParquetWriterExec builds its WriterProperties with compression and nothing else (native/core/src/execution/operators/parquet_writer.rs):
let props = WriterProperties::builder().set_compression(compression).build();
Every other Parquet write knob Spark exposes is therefore silently ignored, and files come out with arrow-rs defaults rather than the ones the user configured:
spark.sql.files.maxRecordsPerFile (needs file rolling, so partly separate)
Row group size is the one with real consequences: the default row group size decides read parallelism and memory for every downstream consumer, and a user who set parquet.block.size gets no error, just a differently shaped file.
This also matters beyond the V1 write path — #4658 splits Iceberg writes into writer + committer operators with the stated goal of writing data files natively next, and Iceberg data files are read by engines other than Spark.
Describe the potential solution
Thread the resolved options through the ParquetWriter protobuf message and set them on WriterProperties. Spark's ParquetOptions / ParquetWriteSupport are the reference for precedence and defaults.
Related: #2814 (compression settings), #3425 (INT96), #3427 (Spark version in footer metadata).
What is the problem the feature request solves?
ParquetWriterExecbuilds itsWriterPropertieswith compression and nothing else (native/core/src/execution/operators/parquet_writer.rs):Every other Parquet write knob Spark exposes is therefore silently ignored, and files come out with arrow-rs defaults rather than the ones the user configured:
parquet.block.size(row group size) — tracked as an unchecked item on [EPIC] Improve Comet Native writer #2967parquet.page.size/parquet.page.row.count.limitparquet.enable.dictionaryand dictionary page sizespark.sql.parquet.writer.version(PARQUET_1_0/PARQUET_2_0)spark.sql.files.maxRecordsPerFile(needs file rolling, so partly separate)Row group size is the one with real consequences: the default row group size decides read parallelism and memory for every downstream consumer, and a user who set
parquet.block.sizegets no error, just a differently shaped file.This also matters beyond the V1 write path — #4658 splits Iceberg writes into writer + committer operators with the stated goal of writing data files natively next, and Iceberg data files are read by engines other than Spark.
Describe the potential solution
Thread the resolved options through the
ParquetWriterprotobuf message and set them onWriterProperties. Spark'sParquetOptions/ParquetWriteSupportare the reference for precedence and defaults.Related: #2814 (compression settings), #3425 (INT96), #3427 (Spark version in footer metadata).