NVIDIA / NVIDIA/cudf

[Story][FEA] Complete grouped over expression coverage in cuDF-Polars

Open
#23,606 0 comments 0 reactions 1 assignee Claimed by @rjzamora View on GitHub
cudf-polars feature request
Dominant language
C++
Stars
9.8k
Forks
1.1k
Avg merge
3d 6m
Merged PRs (30d)
278

Description

Grouped `over(...)` expressions are implemented in cuDF-Polars using a forward-shuffle / local-evaluate / backward-shuffle execution model. This issue tracks remaining grouped-`over` API coverage that can use that model before we tackle long-term huge-group execution where one group may need to span multiple partitions/ranks.

Initial child issues / feature areas:
- Support `rolling_*_by(...).over(...)`: https://github.com/rapidsai/cudf/issues/23591
- Support `rolling(...).over(...)`: https://github.com/NVIDIA/cudf/issues/23623
- Support cumulative grouped-over variants such as `cum_min().over(...)`, `cum_max().over(...)`, `cum_prod().over(...)`, and `cum_count().over(...)`
- Support `pct_change().over(...)`
- Reduce grouped-over boilerplate by sharing implementation/decomposition logic across order-sensitive expressions

Example:

```python
def test_cum_max_over(engine: GPUEngine) -> None:
lf = pl.LazyFrame(
{
"g": ["A", "A", "A", "B", "B"],
"t": [1, 2, 3, 1, 2],
"x": [10, 30, 20, 5, 15],
}
)

q = lf.select(
pl.col("x").cum_max().over("g", order_by="t").alias("x_cum_max")
)
assert_gpu_result_equal(q, engine=engine)
```

**Note**: This issue is about near-term grouped `over(...)` API coverage. Full distributed execution for low-cardinality / huge-group cases can be tracked separately under the broader grouped range-window or streaming ordered-window work.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.