Merge latest release/26.08 into main [skip ci] - #15434
Merged
nvliyuan merged 11 commits intoJul 30, 2026
Merged
Conversation
…in for Apache Spark rename (NVIDIA#15114) Contributes to NVIDIA#15107 ### Description The https://github.com/nvidia/spark-rapids repository has been renamed to https://github.com/nvidia/cudf-spark. This PR rolls out name changes for content and links referenced in the documentation. Not changed here are documentation updates for configurations. Configurations will be added to support the new product name (removing rapids) with a deprecation period. Documentation for configurations can be updated when new configuration names are enabled. Note that this PR modifies some generated documentation, so pre-merge CI should be enabled. ### Checklists Documentation - [X] Updated for new or modified user-facing features or behaviors - [ ] No user-facing change Testing - [ ] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [X] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [X] Not required --------- Signed-off-by: Sameer Raheja <sraheja@.nvidia.com> Co-authored-by: Sameer Raheja <sraheja@.nvidia.com> Co-authored-by: Gary Shen <gashen@nvidia.com>
Fixes NVIDIA#15234 ## Description Add native GPU support for Databricks Delta’s CheckOverflowInTableWrite expression on DBR 17.3. The expression now delegates to GpuCast while preserving Delta’s DELTA_CAST_OVERFLOW_IN_TABLE_WRITE error behavior. The change also: - Registers the expression rule with the DBR 17.3 Delta provider. - Adds success and overflow integration tests. - Disables the CPU-expression bridge in the focused tests to prove native GPU replacement. - Imports the DBR spark-protobuf_2.13 artifact required by the integration-test build. ## Verification Tested on DBR 17.3 GPU ML: - Built successfully with ./jenkins/databricks/build.sh. - Focused MERGE success and overflow tests passed. - Verified GpuRapidsProcessDeltaMergeJoinExec was used with the CPU bridge disabled. - Verified overflow retains DELTA_CAST_OVERFLOW_IN_TABLE_WRITE ## Performance Results On DBR 17.3.x GPU ML, a 10-million-row matched Delta MERGE was measured with 16 partitions, one warm-up, and three alternating runs per mode. Native CheckOverflowInTableWrite support reduced median wall time from 11.447s to 8.559s, a 1.337× speedup and 25.23% reduction in elapsed time. Median rewrite time decreased from 4.648s to 1.784s, while scan times remained comparable. ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required --------- Signed-off-by: Rahul Prabhu <raprabhu@nvidia.com>
…IDIA#15415) Fixes NVIDIA#15405. ### Description `test_orc_gpu_write_cpu_read_timestamp_in_non_utc_timezone` expects ORC timestamp writes to fall back to CPU when the JVM and Spark session use a non-UTC timezone. On Spark versions whose write plan exposes `WriteFilesExec`, that node is also reported as a CPU fallback because its parent write command cannot run on GPU, but the test only allowed `DataWritingCommandExec`. This change allows `WriteFilesExec` only in the existing non-UTC allow list. UTC test behavior remains unchanged. Validation: - `build/buildall --profile=noSnapshots -P=4` built the Scala 2.12 uber jar with 20 shims. - `build/buildall --scala213 --profile=noSnapshots -P=4` built the Scala 2.13 uber jar with all 19 supported shims. - `orc_test.py::test_orc_gpu_write_cpu_read_timestamp_in_non_utc_timezone` passed with `TZ=Asia/Shanghai` on all 20 supported Scala 2.12 Spark installations and all 19 supported Scala 2.13 Spark installations from Spark 3.3.0 through 4.2.0. ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required Signed-off-by: Chong Gao <chongg@nvidia.com> Co-authored-by: Chong Gao <res_life@163.com>
NVIDIA#15413) Fixes NVIDIA#15379. ### Description - Propagate `BroadcastHashJoinExec.isSkewJoin` into `GpuBroadcastHashJoinExec` on Spark 4.2 so AQE skew-optimized broadcast joins keep the flag after GPU conversion, matching Spark's SPARK-44065 plan display. - Override `nodeName` in `GpuBroadcastHashJoinExecBase` to append `(skew=true)` when `isSkewJoin` is set, so GPU explain output mirrors CPU behavior. - Split the Spark 4.2 BHJ shim from the shared `spark340` path because `isSkewJoin` only exists on BHJ in Spark 4.2+, avoiding compile failures on older shims. - Add `BroadcastHashJoinSkewSuite` for Spark 4.2 to assert the GPU join preserves `isSkewJoin` and the plan-string marker. Validation: - `mvn -s ~/.m2/settings_art.xml -f scala2.13/pom.xml -Dbuildver=420 -Dcuda.version=cuda13 -DskipTests verify -pl sql-plugin,tests -am` - `mvn -s ~/.m2/settings_art.xml -Dbuildver=330 -Dcuda.version=cuda13 -DskipTests verify -pl sql-plugin -am` - `mvn -s ~/.m2/settings_art.xml -f scala2.13/pom.xml -Dbuildver=420 -Dcuda.version=cuda13 package -pl tests -am -DwildcardSuites=com.nvidia.spark.rapids.BroadcastHashJoinSkewSuite` ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required Signed-off-by: Firestarman <firestarmanllc@gmail.com>
Fixes NVIDIA#15323. ### Description This is a follow-up to NVIDIA#15360 that makes the Iceberg S3 path regression test reliable with a REST catalog. The test previously constructed the problematic path by overriding `write.data.path` with the configured warehouse. For a REST catalog, the warehouse value can be a logical identifier rather than a physical S3 location. The updated test follows `test_iceberg_parquet_read_from_url_encoded_path`: - Adds a string containing a raw space as special-case partition data. The value is valid in an S3 object key but invalid in a URI unless encoded. - Creates an Iceberg table partitioned by that column and lets Iceberg construct the data-file path through its normal partition writer. - Continues to run only with the REST catalog, where the optimized S3 reader is exercised. - Verifies the startup-only `spark.rapids.perfio.s3.enabled` setting through SparkConf instead of querying an executor-initialized PerfIO singleton from the driver. Testing performed: - The REST-catalog run completed 184 existing tests successfully; the three new parameterized variants reached table setup and exposed the driver-side PerfIO assertion corrected here. - `python3 -m py_compile integration_tests/src/main/python/iceberg/iceberg_test.py` - `git diff --check` A final REST-catalog pipeline rerun is pending. ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required --------- Signed-off-by: Ray Liu <liurenjie2008@gmail.com>
Keep the main branch 26.10 version while incorporating the latest Spark 4.2 broadcast-join and Iceberg regression fixes from release/26.08. Signed-off-by: liyuan <yuali@nvidia.com>
Contributor
Greptile SummaryThis release-branch merge brings Delta Lake, Spark 4.2, Iceberg, and utility updates into main.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart LR
Release["release/26.08 changes"] --> Main["main / 26.10.0-SNAPSHOT"]
Main --> Delta["Delta deletion vectors and RTAS"]
Main --> Spark42["Spark 4.2 date_trunc and skew-join shims"]
Main --> Iceberg["Iceberg S3 path regression coverage"]
Main --> Utility["ByteBufferInputStream extraction"]
Reviews (3): Last reviewed commit: "Merge branch 'main' into fix-auto-merge-..." | Re-trigger Greptile |
GaryShen2008
previously approved these changes
Jul 30, 2026
…ors for OSS delta [databricks] (NVIDIA#15368) Fixes NVIDIA#15326. ### Description The CDF read with deletion vectors currently fails. Two things were missing to support this case: - The `IF_NOT_CONTAINED` row index filter type support. The Delta CDC reader can use this type of row index filter. - Inline deletion vector support. The CDC reader creates inline deletion vectors. This PR adds those supports based on NVIDIA/cudf#23402 for OSS Delta. The plugin now can load inline deletion vectors and process the `IF_NOT_CONTAINED` filter properly with all 3 Delta readers. Note that the issue exists only with the native readers (`GpuDeltaParquetFileFormatBase2`). The legacy reader (`GpuDeltaParquetFileFormatBase`) does not have this issue. Databricks readers have the same issue, and will be fixed in NVIDIA#15365. ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required --------- Signed-off-by: Jihoon Son <ghoonson@gmail.com>
Collaborator
Author
|
build |
Fixes NVIDIA#15394 ### Description On OSS Spark 4.0 with Delta Lake 4.0, `CREATE OR REPLACE TABLE ... USING DELTA AS SELECT ...` succeeds on CPU but fails on GPU with: ```text [UNSUPPORTED_FEATURE.TABLE_OPERATION] Table ... does not support truncate in batch mode ``` Spark 4 plans RTAS as an unconditional `OverwriteByExpression`. Its table capability check therefore requires the staged table to support `TRUNCATE`. The RAPIDS staged Delta table advertised only `V1_BATCH_WRITE`, and its write builder did not implement `SupportsTruncate`. In addition, the Delta provider's `OverwriteByExpressionExecV1` handling recognized regular `DeltaTableV2` tables but not the RAPIDS staged Delta table used by atomic RTAS. In this PR: - Added `TRUNCATE` to the capabilities advertised by `GpuStagedDeltaTableV2`. - Implemented `SupportsTruncate` in the staged Delta V1 write builder. - Tags and converts `OverwriteByExpressionExecV1` for RAPIDS staged Delta tables to `GpuOverwriteByExpressionExecV1`. - Applied the staged-table handling to the Delta 3.3, 4.0, and 4.1 provider implementations. - Preserved the existing behavior for regular `DeltaTableV2` tables and continues to reject unrelated table implementations. - Limits the existing Delta issue NVIDIA#4671 RTAS xfails to the affected Spark 3.5 releases instead of also applying them to Spark 4. - Added an integration regression test. ### Testing #### OSS Spark 4.0 / Delta Lake 4.0 Focused integration test: ```text TEST=test_delta_rtas_truncate_capability ``` Result: `1 passed, 39635 deselected`. Broader focused RTAS selection: ```text TEST="test_delta_rtas_truncate_capability or test_delta_rtas_sql" ``` Result: `3 passed, 1 skipped, 39632 deselected`. ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required --------- Signed-off-by: Niranjan Artal <nartal@nvidia.com>
Collaborator
…IDIA#15416) Fixes NVIDIA#15382. ### Description - Match Spark 4.2 (`SPARK-56663`) `date_trunc` semantics at `Long.MinValue` micros: truncation underflow must raise `ArithmeticException` instead of returning a wrapped positive timestamp on GPU. - Route the check through `TruncTimestampShims` so Spark 4.2 enables the overflow check while older supported Spark lines keep the previous no-op behavior, without runtime version compares in common code. - Add `test_date_trunc_long_min_value_overflow` for `YEAR` and `MILLISECOND` on Spark 4.2+, comparing CPU/GPU exception behavior and validating the GPU plan includes `GpuProjectExec`. - Validated with: - `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml -pl sql-plugin -Dbuildver=420 -Dcuda.version=cuda13 -DskipTests clean compile` - `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml -pl sql-plugin -Dbuildver=413 -Dcuda.version=cuda13 -DskipTests clean compile` - `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml -Dbuildver=420 -Dcuda.version=cuda13 -DskipTests validate` - `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml -Dbuildver=413 -Dcuda.version=cuda13 -DskipTests validate` ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [x] Added or modified tests to cover new code paths - [ ] Covered by existing tests (Please provide the names of the existing tests in the PR description.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required --------- Signed-off-by: Firestarman <firestarmanllc@gmail.com>
Include the Delta RTAS, deletion-vector, and Spark 4.2 date_trunc fixes merged into release/26.08 after the initial conflict-resolution commit. Signed-off-by: liyuan <yuali@nvidia.com>
Collaborator
Author
Thanks for the heads-up. I refreshed #15434 with the latest release/26.08, so #15411 is now included, along with #15368 and #15416. @GaryShen2008 could you help re-review thx? |
GaryShen2008
approved these changes
Jul 30, 2026
Collaborator
Author
|
build |
8 tasks
GaryShen2008
pushed a commit
that referenced
this pull request
Jul 31, 2026
Restore the release branch parent lost when #15434 was squash-merged while keeping the current main tree unchanged. Signed-off-by: liyuan <yuali@nvidia.com>
GaryShen2008
added a commit
that referenced
this pull request
Jul 31, 2026
### Description #15434 was squash-merged, so its code reached `main` but the `release/26.08` commit ancestry was lost. As a result, auto-merge PR #15412 remained open and conflicting. This PR records the missing ancestry by merging the current `release/26.08` head into the current `main` head while keeping the main tree unchanged. ### Verification - The merge commit has two parents: - current main: `e1e1ba3cfd7d24d0867759d5731bf2c65210c1c5` - release/26.08: `e5bcfffd061bc9b58fdf138010b5b6ca61d934e3` - `git diff origin/main...HEAD` is empty. - Both POM version conflicts retained main's `26.10.0-SNAPSHOT` value. - `git diff --check` passes. ### Checklists Documentation - [ ] Updated for new or modified user-facing features or behaviors - [x] No user-facing change Testing - [ ] Added or modified tests to cover new code paths - [x] Covered by existing tests (No tree changes; ancestry only.) - [ ] Not required Performance - [ ] Tests ran and results are added in the PR description - [ ] Issue filed with a link in the PR description - [x] Not required IMPORTANT: This PR must be merged using **Create a merge commit**. Squash or rebase would discard the release parent again and leave #15412 unresolved.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves the latest merge conflicts in #15412 after #15423 merged.
Description
Merge the current
release/26.08head into the currentmainhead.The initial conflicts were the root and Scala 2.13 project versions. Both were resolved by retaining main's
26.10.0-SNAPSHOTversion instead of the release branch's26.08.0-SNAPSHOTversion.The branch was refreshed again after additional PRs landed on
release/26.08. The current diff includes all release updates added after #15423, including:isSkewJoindate_truncoverflow behaviorChecklists
Documentation
Testing
(The included release commits retain their original tests.)
Performance
Validation
git diff --checkpython3 -m py_compilefor the modified Iceberg, Delta, and date-time integration testsIMPORTANT: Merge this PR using Create a merge commit so the release commit ancestry is preserved and #15412 can close automatically.