Skip to content

[SPARK-53420][BUILD] Upgrade Parquet to 1.16.0 - #52165

Closed
pan3793 wants to merge 2 commits into
apache:masterfrom
pan3793:parquet-1.16.0
Closed

[SPARK-53420][BUILD] Upgrade Parquet to 1.16.0#52165
pan3793 wants to merge 2 commits into
apache:masterfrom
pan3793:parquet-1.16.0

Conversation

@pan3793

@pan3793pan3793 commented Aug 28, 2025

Copy link
Copy Markdown
Member

What changes were proposed in this pull request?

Parquet Java 1.16.0 Release Notes: https://github.com/apache/parquet-java/releases/tag/apache-parquet-1.16.0

Why are the changes needed?

Keep Parquet update to date, benefit from upstream bugfixes and improvements.

Does this PR introduce any user-facing change?

No.

How was this patch tested?

Pass GHA.

Run TPC-DS 300G (query time in seconds), no surprise compared to Parquet 1.15.2

query_nameparquet 1.15.2parquet 1.16.0 RC2
q01.sql3129
q02.sql2620
q03.sql99
q04.sql6767
q05.sql1414
q06.sql88
q07.sql55
q08.sql66
q09.sql1312
q10.sql66
q11.sql3131
q12.sql43
q13.sql55
q14a.sql5253
q14b.sql4141
q15.sql44
q16.sql1616
q17.sql77
q18.sql66
q19.sql66
q20.sql33
q21.sql54
q22.sql1010
q23a.sql7674
q23b.sql8080
q24a.sql3939
q24b.sql3231
q25.sql77
q26.sql43
q27.sql33
q28.sql1716
q29.sql99
q30.sql99
q31.sql1313
q32.sql22
q33.sql56
q34.sql55
q35.sql1313
q36.sql44
q37.sql76
q38.sql1312
q39a.sql77
q39b.sql76
q40.sql56
q41.sql00
q42.sql12
q43.sql44
q44.sql77
q45.sql33
q46.sql77
q47.sql1112
q48.sql55
q49.sql77
q50.sql1616
q51.sql1514
q52.sql22
q53.sql22
q54.sql45
q55.sql12
q56.sql44
q57.sql129
q58.sql46
q59.sql1410
q60.sql77
q61.sql43
q62.sql45
q63.sql22
q64.sql2121
q65.sql1212
q66.sql67
q67.sql4645
q68.sql76
q69.sql1010
q70.sql55
q71.sql66
q72.sql1716
q73.sql44
q74.sql2424
q75.sql2421
q76.sql1210
q77.sql65
q78.sql3131
q79.sql55
q80.sql98
q81.sql87
q82.sql1111
q83.sql44
q84.sql54
q85.sql87
q86.sql33
q87.sql1413
q88.sql1313
q89.sql43
q90.sql43
q91.sql34
q92.sql22
q93.sql2120
q94.sql99
q95.sql6261
q96.sql53
q97.sql1211
q98.sql43
q99.sql66

Was this patch authored or co-authored using generative AI tooling?

No.

@dongjoon-hyundongjoon-hyun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you always, @pan3793 .

@Fokko

Copy link
Copy Markdown
Contributor

You beat me to it @pan3793 Thanks for creating this PR 🚀

@pan3793

Copy link
Copy Markdown
MemberAuthor

@Fokko, I'm looking forward to this release for a long time, since it includes my two patches required by SPARK-52011(#50765) 😄

@pan3793

pan3793 commented Aug 28, 2025

Copy link
Copy Markdown
MemberAuthor

@dongjoon-hyun@Fokko, this release contains a correctness fix, it affects the Parquet 1.15.2 used by Spark branch-4.0.

It seems that the Parquet community does not have a plan for another release of 1.15.x yet, not sure if this will be a blocker for the upcoming Spark 4.0.1

@dongjoon-hyun

Copy link
Copy Markdown
Member

Thank you for informing me, @pan3793 .

@pan3793

Copy link
Copy Markdown
MemberAuthor

One test failed due to the Parquet data file size change, it's not a real issue, I opened #52168 to improve the test.

@dongjoon-hyun

Copy link
Copy Markdown
Member

I took a look at #52168, but we had better update the expectSize instead of removing a test coverage, @pan3793 .

@dongjoon-hyun

Copy link
Copy Markdown
Member

Thank you so much always for keeping tracking the upstream RCs, @pan3793 .

As a release manager of Apache Spark 4.0.1, as of now, I don't think this is a blocker for Apache Spark 4.0.1 release because

  • This is a feature release instead of a maintenance release of Parquet (as you mentioned).
  • There is no official Parquet release (still RC3?).
  • After we get the official 1.16.0 release, we still need to spend more efforts to validate more with Apache Spark 4.1.0 (master branch) for a while because Apache Parquet is the default file format of Apache Spark 4.1.0 first.

Of course, after we merge this to master branch, all downstream forks can cherry-pick and use Apache Parquet 1.16.0 at their own risks in their production environment. That's the main purpose to valid and merge this PR to master branch. Personally, I'm also going to verify with internal benchmarks and more production usages if Apache Parquet 1.16.0 RC3 passes the vote.

I'm sure that we agree that the best case for all and world-wide community, Apache Parquet 1.15.3 is released for Apache Spark 4.0.2 in next 3 months.

@pan3793

Copy link
Copy Markdown
MemberAuthor

@dongjoon-hyun, I agree with your decision, please continue the 4.0.1 release with the existing Parquet 1.15.2

@dongjoon-hyun

Copy link
Copy Markdown
Member

Thank you so much again.

@pan3793

Copy link
Copy Markdown
MemberAuthor

Have run TPC-DS 300G internally, no regression found, I will vote +1 for Parquet 1.16.0 RC2.

@dongjoon-hyun

Copy link
Copy Markdown
Member

Have run TPC-DS 300G internally, no regression found, I will vote +1 for Parquet 1.16.0 RC2.

Thank you for adding the result. Could you elaborate about the environment a little more? Is it against master branch with Apache Spark 4.1.0-SNAPSHOT and Hadoop 3.4.2 and S3 data (or local files) on a single disk, @pan3793 ?

@pan3793

pan3793 commented Sep 2, 2025

Copy link
Copy Markdown
MemberAuthor

Is it against master branch with Apache Spark 4.1.0-SNAPSHOT

Exactly, I built OSS Spark without any changes. (so Spark uses Hadoop 3.4.2 client)

... and Hadoop 3.4.2 and S3 data (or local files) on a single disk

Runs in a small YARN cluster, data is stored in HDFS. YARN/HDFS server version is 3.3.6, both shuffle and HDFS use HDD.

@dongjoon-hyun

Copy link
Copy Markdown
Member

Thank you so much for the details.

@pan3793
pan3793 marked this pull request as ready for review September 3, 2025 03:06
@pan3793

Copy link
Copy Markdown
MemberAuthor

@dongjoon-hyun this should be ready to go. also cc @wangyum

@dongjoon-hyundongjoon-hyun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1, LGTM for Apache Spark 4.1.0.

Thank you, @pan3793 and @wangyum .

Let's merge this to master branch in order to get more chances of community testings.

@LuciferYang

Copy link
Copy Markdown
Contributor

late LGTM

huangxiaopingRD pushed a commit to huangxiaopingRD/spark that referenced this pull request Nov 25, 2025
### What changes were proposed in this pull request?
Parquet Java 1.16.0 Release Notes: https://github.com/apache/parquet-java/releases/tag/apache-parquet-1.16.0
### Why are the changes needed?
Keep Parquet update to date, benefit from upstream bugfixes and improvements.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
Pass GHA.
Run TPC-DS 300G (query time in seconds), no surprise compared to Parquet 1.15.2
| query_name | parquet 1.15.2 | parquet 1.16.0 RC2 |
| :--------- | :----------- | :----------- |
| q01.sql | 31 | 29 |
| q02.sql | 26 | 20 |
| q03.sql | 9 | 9 |
| q04.sql | 67 | 67 |
| q05.sql | 14 | 14 |
| q06.sql | 8 | 8 |
| q07.sql | 5 | 5 |
| q08.sql | 6 | 6 |
| q09.sql | 13 | 12 |
| q10.sql | 6 | 6 |
| q11.sql | 31 | 31 |
| q12.sql | 4 | 3 |
| q13.sql | 5 | 5 |
| q14a.sql | 52 | 53 |
| q14b.sql | 41 | 41 |
| q15.sql | 4 | 4 |
| q16.sql | 16 | 16 |
| q17.sql | 7 | 7 |
| q18.sql | 6 | 6 |
| q19.sql | 6 | 6 |
| q20.sql | 3 | 3 |
| q21.sql | 5 | 4 |
| q22.sql | 10 | 10 |
| q23a.sql | 76 | 74 |
| q23b.sql | 80 | 80 |
| q24a.sql | 39 | 39 |
| q24b.sql | 32 | 31 |
| q25.sql | 7 | 7 |
| q26.sql | 4 | 3 |
| q27.sql | 3 | 3 |
| q28.sql | 17 | 16 |
| q29.sql | 9 | 9 |
| q30.sql | 9 | 9 |
| q31.sql | 13 | 13 |
| q32.sql | 2 | 2 |
| q33.sql | 5 | 6 |
| q34.sql | 5 | 5 |
| q35.sql | 13 | 13 |
| q36.sql | 4 | 4 |
| q37.sql | 7 | 6 |
| q38.sql | 13 | 12 |
| q39a.sql | 7 | 7 |
| q39b.sql | 7 | 6 |
| q40.sql | 5 | 6 |
| q41.sql | 0 | 0 |
| q42.sql | 1 | 2 |
| q43.sql | 4 | 4 |
| q44.sql | 7 | 7 |
| q45.sql | 3 | 3 |
| q46.sql | 7 | 7 |
| q47.sql | 11 | 12 |
| q48.sql | 5 | 5 |
| q49.sql | 7 | 7 |
| q50.sql | 16 | 16 |
| q51.sql | 15 | 14 |
| q52.sql | 2 | 2 |
| q53.sql | 2 | 2 |
| q54.sql | 4 | 5 |
| q55.sql | 1 | 2 |
| q56.sql | 4 | 4 |
| q57.sql | 12 | 9 |
| q58.sql | 4 | 6 |
| q59.sql | 14 | 10 |
| q60.sql | 7 | 7 |
| q61.sql | 4 | 3 |
| q62.sql | 4 | 5 |
| q63.sql | 2 | 2 |
| q64.sql | 21 | 21 |
| q65.sql | 12 | 12 |
| q66.sql | 6 | 7 |
| q67.sql | 46 | 45 |
| q68.sql | 7 | 6 |
| q69.sql | 10 | 10 |
| q70.sql | 5 | 5 |
| q71.sql | 6 | 6 |
| q72.sql | 17 | 16 |
| q73.sql | 4 | 4 |
| q74.sql | 24 | 24 |
| q75.sql | 24 | 21 |
| q76.sql | 12 | 10 |
| q77.sql | 6 | 5 |
| q78.sql | 31 | 31 |
| q79.sql | 5 | 5 |
| q80.sql | 9 | 8 |
| q81.sql | 8 | 7 |
| q82.sql | 11 | 11 |
| q83.sql | 4 | 4 |
| q84.sql | 5 | 4 |
| q85.sql | 8 | 7 |
| q86.sql | 3 | 3 |
| q87.sql | 14 | 13 |
| q88.sql | 13 | 13 |
| q89.sql | 4 | 3 |
| q90.sql | 4 | 3 |
| q91.sql | 3 | 4 |
| q92.sql | 2 | 2 |
| q93.sql | 21 | 20 |
| q94.sql | 9 | 9 |
| q95.sql | 62 | 61 |
| q96.sql | 5 | 3 |
| q97.sql | 12 | 11 |
| q98.sql | 4 | 3 |
| q99.sql | 6 | 6 |
### Was this patch authored or co-authored using generative AI tooling?
No.
Closesapache#52165 from pan3793/parquet-1.16.0.
Authored-by: Cheng Pan <chengpan@apache.org>
Signed-off-by: Dongjoon Hyun <dongjoon@apache.org>
baibaichen added a commit to baibaichen/gluten that referenced this pull request Jan 5, 2026
baibaichen added a commit to baibaichen/gluten that referenced this pull request Jan 8, 2026
## Changes
| Cause | Type | Category | Description | Affected Files |
|-------|------|----------|-------------|----------------|
| N/A | Feat | Build | Update build configuration to support Spark 4.1 UT | `.github/workflows/velox_backend_x86.yml`, `gluten-ut/pom.xml`, `gluten-ut/spark41/pom.xml`, `tools/gluten-it/pom.xml` |
| [#52165](apache/spark#52165) | Fix | Dependency | Update Parquet dependency version to 1.16.0 to avoid NoSuchMethodError issue | `gluten-ut/spark41/pom.xml` |
| [#51477](apache/spark#51477) | Fix | Compatibility | Update imports to reflect streaming runtime package refactoring in Apache Spark | `gluten-ut/spark41/.../GlutenDynamicPartitionPruningSuite.scala`, `gluten-ut/spark41/.../GlutenStreamingQuerySuite.scala` |
| [#50674](apache/spark#50674) | Fix | Compatibility | Fix compatibility issue introduced by `TypedConfigBuilder` | `gluten-substrait/.../ExpressionConverter.scala`, `gluten-ut/spark41/.../GlutenCSVSuite.scala`, `gluten-ut/spark41/.../GlutenJsonSuite.scala` |
| [#49766](apache/spark#49766) | Fix | Compatibility | Disable V2 bucketing in GlutenDynamicPartitionPruningSuite since spark.sql.sources.v2.bucketing.enabled is now enabled by default | `gluten-ut/spark41/.../GlutenDynamicPartitionPruningSuite.scala` |
| [#42414](apache/spark#42414), [#53038](apache/spark#53038) | Fix | Bug Fix | Resolve an issue introduced by SPARK-42414, as identified in SPARK-53038 | `backends-velox/.../VeloxBloomFilterAggregate.scala` |
| N/A | Fix | Bug Fix | Enforce row fallback for unsupported cached batches - keep columnar execution only when schema validation succeeds | `backends-velox/.../ColumnarCachedBatchSerializer.scala` |
| [SPARK-53132](apache/spark#53132), [SPARK-53142](apache/spark#53142) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 KeyGroupedPartitioningSuite tests. Excluded tests: `SPARK-53322*`, `SPARK-54439*` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [SPARK-53535](https://issues.apache.org/jira/browse/SPARK-53535), [SPARK-54220](https://issues.apache.org/jira/browse/SPARK-54220) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenParquetIOSuite tests. Excluded tests: `SPARK-53535*`, `vectorized reader: missing all struct fields*`, `SPARK-54220*` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#52645](apache/spark#52645) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenStreamingQuerySuite tests. Excluded tests: `SPARK-53942: changing the number of stateless shuffle partitions via config`, `SPARK-53942: stateful shuffle partitions are retained from old checkpoint` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#47856](apache/spark#47856) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenDataFrameWindowFunctionsSuite and GlutenJoinSuite tests. Excluded tests: `SPARK-49386: Window spill with more than the inMemoryThreshold and spillSizeThreshold`, `SPARK-49386: test SortMergeJoin (with spill by size threshold)` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#52157](apache/spark#52157) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenQueryExecutionSuite tests. Excluded test: `#53413: Cleanup shuffle dependencies for commands` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#48470](apache/spark#48470) | 4.1.0 | Test Exclusion | Exclude split test in GlutenRegexpExpressionsSuite. Excluded test: `GlutenRegexpExpressionsSuite.SPLIT` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#51623](apache/spark#51623) | 4.1.0 | Test Exclusion | Add `spark.sql.unionOutputPartitioning=false` to Maven test args. Excluded tests: `GlutenBroadcastExchangeSuite.SPARK-52962`, `GlutenDataFrameSetOperationsSuite.SPARK-52921*` | `.github/workflows/velox_backend_x86.yml`, `gluten-ut/spark41/.../VeloxTestSettings.scala`, `tools/gluten-it/common/.../Suite.scala` |
| N/A | 4.1.0 | Test Exclusion | Excludes failed SQL tests that need to be fixed for Spark 4.1 compatibility. Excluded tests: `decimalArithmeticOperations.sql`, `identifier-clause.sql`, `keywords.sql`, `literals.sql`, `operators.sql`, `exists-orderby-limit.sql`, `postgreSQL/date.sql`, `nonansi/keywords.sql`, `nonansi/literals.sql`, `datetime-legacy.sql`, `datetime-parsing-invalid.sql`, `misc-functions.sql` | `gluten-ut/spark41/.../VeloxSQLQueryTestSettings.scala` |
| apache#11252 | 4.1.0 | Test Exclusion | Exclude Gluten test for SPARK-47939: Explain should work with parameterized queries | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
baibaichen added a commit to apache/gluten that referenced this pull request Jan 8, 2026
## Changes
| Cause | Type | Category | Description | Affected Files |
|-------|------|----------|-------------|----------------|
| N/A | Feat | Build | Update build configuration to support Spark 4.1 UT | `.github/workflows/velox_backend_x86.yml`, `gluten-ut/pom.xml`, `gluten-ut/spark41/pom.xml`, `tools/gluten-it/pom.xml` |
| [#52165](apache/spark#52165) | Fix | Dependency | Update Parquet dependency version to 1.16.0 to avoid NoSuchMethodError issue | `gluten-ut/spark41/pom.xml` |
| [#51477](apache/spark#51477) | Fix | Compatibility | Update imports to reflect streaming runtime package refactoring in Apache Spark | `gluten-ut/spark41/.../GlutenDynamicPartitionPruningSuite.scala`, `gluten-ut/spark41/.../GlutenStreamingQuerySuite.scala` |
| [#50674](apache/spark#50674) | Fix | Compatibility | Fix compatibility issue introduced by `TypedConfigBuilder` | `gluten-substrait/.../ExpressionConverter.scala`, `gluten-ut/spark41/.../GlutenCSVSuite.scala`, `gluten-ut/spark41/.../GlutenJsonSuite.scala` |
| [#49766](apache/spark#49766) | Fix | Compatibility | Disable V2 bucketing in GlutenDynamicPartitionPruningSuite since spark.sql.sources.v2.bucketing.enabled is now enabled by default | `gluten-ut/spark41/.../GlutenDynamicPartitionPruningSuite.scala` |
| [#42414](apache/spark#42414), [#53038](apache/spark#53038) | Fix | Bug Fix | Resolve an issue introduced by SPARK-42414, as identified in SPARK-53038 | `backends-velox/.../VeloxBloomFilterAggregate.scala` |
| N/A | Fix | Bug Fix | Enforce row fallback for unsupported cached batches - keep columnar execution only when schema validation succeeds | `backends-velox/.../ColumnarCachedBatchSerializer.scala` |
| [SPARK-53132](apache/spark#53132), [SPARK-53142](apache/spark#53142) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 KeyGroupedPartitioningSuite tests. Excluded tests: `SPARK-53322*`, `SPARK-54439*` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [SPARK-53535](https://issues.apache.org/jira/browse/SPARK-53535), [SPARK-54220](https://issues.apache.org/jira/browse/SPARK-54220) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenParquetIOSuite tests. Excluded tests: `SPARK-53535*`, `vectorized reader: missing all struct fields*`, `SPARK-54220*` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#52645](apache/spark#52645) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenStreamingQuerySuite tests. Excluded tests: `SPARK-53942: changing the number of stateless shuffle partitions via config`, `SPARK-53942: stateful shuffle partitions are retained from old checkpoint` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#47856](apache/spark#47856) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenDataFrameWindowFunctionsSuite and GlutenJoinSuite tests. Excluded tests: `SPARK-49386: Window spill with more than the inMemoryThreshold and spillSizeThreshold`, `SPARK-49386: test SortMergeJoin (with spill by size threshold)` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#52157](apache/spark#52157) | 4.1.0 | Test Exclusion | Exclude additional Spark 4.1 GlutenQueryExecutionSuite tests. Excluded test: `#53413: Cleanup shuffle dependencies for commands` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#48470](apache/spark#48470) | 4.1.0 | Test Exclusion | Exclude split test in GlutenRegexpExpressionsSuite. Excluded test: `GlutenRegexpExpressionsSuite.SPLIT` | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
| [#51623](apache/spark#51623) | 4.1.0 | Test Exclusion | Add `spark.sql.unionOutputPartitioning=false` to Maven test args. Excluded tests: `GlutenBroadcastExchangeSuite.SPARK-52962`, `GlutenDataFrameSetOperationsSuite.SPARK-52921*` | `.github/workflows/velox_backend_x86.yml`, `gluten-ut/spark41/.../VeloxTestSettings.scala`, `tools/gluten-it/common/.../Suite.scala` |
| N/A | 4.1.0 | Test Exclusion | Excludes failed SQL tests that need to be fixed for Spark 4.1 compatibility. Excluded tests: `decimalArithmeticOperations.sql`, `identifier-clause.sql`, `keywords.sql`, `literals.sql`, `operators.sql`, `exists-orderby-limit.sql`, `postgreSQL/date.sql`, `nonansi/keywords.sql`, `nonansi/literals.sql`, `datetime-legacy.sql`, `datetime-parsing-invalid.sql`, `misc-functions.sql` | `gluten-ut/spark41/.../VeloxSQLQueryTestSettings.scala` |
| #11252 | 4.1.0 | Test Exclusion | Exclude Gluten test for SPARK-47939: Explain should work with parameterized queries | `gluten-ut/spark41/.../VeloxTestSettings.scala` |
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@pan3793@Fokko@dongjoon-hyun@LuciferYang@wangyum