fix(cudf): Restore Spark workload coverage - #54
Merged
thirtiseven merged 7 commits intoAug 12, 2026
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Restores cuDF coverage for Spark expressions, unnest execution, and partial-identity aggregation.
Changes:
- Adds Spark expression support and parity tests.
- Re-registers
CudfUnnest. - Optimizes partial-identity aggregation ownership and capacity handling.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
FilterProjectTest.cpp |
Adds expression parity tests. |
ExpressionEvaluatorSelectionTest.cpp |
Tests GPU expression selection. |
AggregationTest.cpp |
Tests zero-capacity partial identity. |
AdapterOperatorTest.cpp |
Verifies cuDF unnest selection. |
ExpressionEvaluator.cpp |
Implements restored Spark expressions. |
AstExpressionUtils.h |
Adds the isnull alias. |
OperatorAdapters.cpp |
Registers the unnest adapter. |
CudfGroupby.h |
Extends partial-identity ownership API. |
CudfGroupby.cpp |
Transfers input ownership during partial identity. |
CMakeLists.txt |
Restores CudfUnnest.cpp to the build. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
winningsix
approved these changes
Aug 12, 2026
Collaborator
|
there's a failing CI job. Please help address it before merging. |
Collaborator
Author
It is failing for a while and some changes is not related to this pr. Let me try to fix it in another PR. |
thirtiseven
merged commit Aug 12, 2026
de935de
into
HighPerfDataAccelerator:dev
2 of 3 checks passed
This was referenced Sep 1, 2026
sperlingxx
added a commit
that referenced
this pull request
Sep 1, 2026
- Rewrite `CudfFilterProjectTest.multiBranchSwitchWithRegexpExtract` WHEN predicates from SQL `=` to Spark `equalto(...)`. - DuckParser maps `=` to Presto `eq`, which the Spark fixture does not register, so the test died in `resolveScalarFunctionType` before SWITCH ran. - The invalid Spark CASE WHEN text was introduced in #54 (`382e95fdd`). This is a test-dialect fix, not a production SWITCH/`regexp_extract` change. Fixes #109 Part of #100
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.
Summary
regexp_extract, numeric-to-VARCHARcasts,
isnull, dynamicarray, and multi-branchswitchexpressionsCudfUnnestto the cuDF exec build and operator adapter registryMotivation
The TypedExpr expression-subsystem merge dropped coverage that existed in the previous exec::Expr implementation. Strict functional canaries exposed regressions across scalar expression evaluation, multi-branch
switch, andunnestoperator selection.Large-scale aggregation validation additionally exposed two independent partial-identity issues: enabling partial identity was incorrectly coupled to a non-zero streaming capacity, and partial identity deep-copied its complete input. The ownership transfer follows the existing
CudfFilterProjectpattern and copies only when a source column has multiple consumers.Test plan
Native GPU tests:
AggregationTest.partialIdentityUsesQueryScopedStreamingCapacityAggregationTest.partialIdentityDoesNotRequireStreamingCapacityCudfExpressionSelectionTest.multiBranchSwitchProduction build:
velox_cudf_execcompiled successfully100% local MPP validation (4 executors / 4 x 32 GiB GPUs, CPU fallback disabled):
asyncallocatormanaged_asyncThe aggregation-heavy query still outgrows a 32 GiB GPU with
async. Device diagnostics show about 33.25 GB of live RMM allocations while the FINAL group-by accumulates state, so this is not retained allocator cache.managed_asyncvalidates the fixed operator paths and correctness at full scale, but it is not a performance configuration. A separate follow-up should add FINAL group-by spill or test a topology with more physical MPP partitions.