Skip to content

GH-47752: [C++][Python][Parquet] Add minimum compression savings for V2 pages - #52580

Draft
MashrafeeAryan wants to merge 3 commits into
apache:mainfrom
MashrafeeAryan:adaptive-compression
Draft

MashrafeeAryan wants to merge 3 commits into
apache:mainfrom
MashrafeeAryan:adaptive-compression

Conversation

@MashrafeeAryan

@MashrafeeAryan MashrafeeAryan commented Oct 9, 2026 •

Copy link
Copy Markdown

Fixes #47752.

Rationale for this change

Parquet's V2 pages currently keep compression whenever the compressed values are smaller than the original values. Even if it saves very little space, it still does it. For instance, it can compress 100 KB to 99 KB and save it. Even though that's 1% storage efficient, it might not be worth the decompression overhead while reading the file.

What changes are included in this PR?

In the PR, I added an optional min_space_savings setting between 0.0 and 1.0. It gives users an option to select the minimum threshold to compress V2 page data values. For instance, if the original file is 100 KB and the user has min_space_savings = 0.1, it means the compressed file needs to save at least 10% space. As a result, unless the file is <= 90 KB, it won't get saved.

I keep the current behavior when the user does not set min_space_savings.

Added C++ and Python implementation.

Are these changes tested?

  • C++ implementation has been tested with unit tests.
  • PyArrow implementation has been tested with unti tests.

Are there any user-facing changes?

C++ and Python users can set min_space_savings when writing V2 pages. For example, 0.1 requires at least 10% space savings before keeping compression.

Was AI used for this PR?

ChatGPT helped to set up the build for PyArrow.

Codex helped find a bug in dataset_writing which ignored min_space_savings.

PR code and description written by:

  • Human (I wrote it. Used ChatGPT to fix my grammar.)
  • AI

Reviewed before submission by:

  • Human
  • AI
  • Not reviewed

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

⚠️ GitHub issue #47752 has been automatically assigned in GitHub to PR creator.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

⚠️ GitHub issue #47752 has been automatically assigned in GitHub to PR creator.

Add min_space_savings to control how much space compression must save. V2 pages below the threshold are written uncompressed. Keep the default behavior and V1 pages unchanged.
Add an option to choose how much space compression must save when writing Parquet files from Python.
Add tests as well.
Dataset writing ignored min_space_savings. Move the argument to the end of the call so it reaches the writer. Add a test to check that the setting changes the file size.
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47752 has been automatically assigned in GitHub to PR creator.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[C++][Parquet] Make compression adaptive with V2 data pages

1 participant