Skip to content

[SPARK-58606][ML] Move association-rule collection and preparation in FPGrowthModel transform from driver to executors - #57806

Closed
zhengruifeng wants to merge 8 commits into
apache:masterfrom
zhengruifeng:ml_fpgrowth_transform_join
Closed

[SPARK-58606][ML] Move association-rule collection and preparation in FPGrowthModel transform from driver to executors#57806
zhengruifeng wants to merge 8 commits into
apache:masterfrom
zhengruifeng:ml_fpgrowth_transform_join

Conversation

@zhengruifeng

@zhengruifeng zhengruifeng commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

What changes were proposed in this pull request?

This PR replaces the manually collected association-rule array and user-defined function in FPGrowthModel.transform with DataFrame operations. It joins input transactions with matching rules, aggregates consequents for each input row, and uses array_except to exclude items already present in the transaction.

The join has no broadcast hint, so Catalyst may use a broadcast nested-loop join only when the plan statistics consider a side small enough.

Why are the changes needed?

Collecting every association rule before a transform creates avoidable driver-memory pressure, particularly for Spark Connect server workloads with many rules.

Does this PR introduce any user-facing change?

No.

How was this patch tested?

  • build/sbt -java-home /usr/lib/jvm/java-17-openjdk-amd64 mllib/compile
  • The focused FPGrowthSuite has not been run locally yet.

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

Generated-by: Codex (GPT-5)

@zhengruifeng zhengruifeng changed the title [SPARK-58606][ML] Use a DataFrame join in FPGrowthModel transform [SPARK-58606][ML] Move FPGrowthModel transform workload from driver to executors Aug 6, 2026
@zhengruifeng zhengruifeng changed the title [SPARK-58606][ML] Move FPGrowthModel transform workload from driver to executors [SPARK-58606][ML] Move association-rule collection and preparation in FPGrowthModel transform to executors Aug 6, 2026
@zhengruifeng zhengruifeng changed the title [SPARK-58606][ML] Move association-rule collection and preparation in FPGrowthModel transform to executors [SPARK-58606][ML] Move association-rule collection and preparation in FPGrowthModel transform from driver to executors Aug 6, 2026
zhengruifeng added a commit that referenced this pull request Aug 6, 2026
… FPGrowthModel transform from driver to executors

### What changes were proposed in this pull request?

This PR replaces the manually collected association-rule array and user-defined function in `FPGrowthModel.transform` with DataFrame operations. It joins input transactions with matching rules, aggregates consequents for each input row, and uses `array_except` to exclude items already present in the transaction.

The join has no broadcast hint, so Catalyst may use a broadcast nested-loop join only when the plan statistics consider a side small enough.

### Why are the changes needed?

Collecting every association rule before a transform creates avoidable driver-memory pressure, particularly for Spark Connect server workloads with many rules.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

- `build/sbt -java-home /usr/lib/jvm/java-17-openjdk-amd64 mllib/compile`
- The focused `FPGrowthSuite` has not been run locally yet.

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

Generated-by: Codex (GPT-5)

Closes #57806 from zhengruifeng/ml_fpgrowth_transform_join.

Authored-by: Ruifeng Zheng <ruifengz@apache.org>
Signed-off-by: Ruifeng Zheng <ruifengz@foxmail.com>
(cherry picked from commit 21a1ae1)
Signed-off-by: Ruifeng Zheng <ruifengz@foxmail.com>
@zhengruifeng

Copy link
Copy Markdown
Contributor Author

Merge Summary:

Posted by merge_spark_pr.py

@zhengruifeng
zhengruifeng deleted the ml_fpgrowth_transform_join branch August 6, 2026 07:23
zhengruifeng added a commit that referenced this pull request Aug 6, 2026
### What changes were proposed in this pull request?

This follow-up to #57806 gives the transient association-rules column in `FPGrowthModel.transform` a generated name instead of the fixed name `rules`. It also adds regression coverage for an input dataset that already contains a `rules` column.

### Why are the changes needed?

The fixed temporary column can conflict with an input column of the same name after the join, causing ambiguous-column analysis failures or dropping the user's column.

### Does this PR introduce _any_ user-facing change?

Yes. `FPGrowthModel.transform` now supports and preserves an input column named `rules`.

### How was this patch tested?

- `build/sbt -java-home /usr/lib/jvm/java-17-openjdk-amd64 mllib/Test/compile`
- Added `FPGrowthSuite` coverage for an input `rules` column. The focused suite has not been run locally yet.

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

Generated-by: Codex (GPT-5)

Closes #57816 from zhengruifeng/ml_fpgrowth_temp_rules_column.

Authored-by: Ruifeng Zheng <ruifengz@apache.org>
Signed-off-by: Ruifeng Zheng <ruifengz@foxmail.com>
zhengruifeng added a commit that referenced this pull request Aug 6, 2026
### What changes were proposed in this pull request?

This follow-up to #57806 gives the transient association-rules column in `FPGrowthModel.transform` a generated name instead of the fixed name `rules`. It also adds regression coverage for an input dataset that already contains a `rules` column.

### Why are the changes needed?

The fixed temporary column can conflict with an input column of the same name after the join, causing ambiguous-column analysis failures or dropping the user's column.

### Does this PR introduce _any_ user-facing change?

Yes. `FPGrowthModel.transform` now supports and preserves an input column named `rules`.

### How was this patch tested?

- `build/sbt -java-home /usr/lib/jvm/java-17-openjdk-amd64 mllib/Test/compile`
- Added `FPGrowthSuite` coverage for an input `rules` column. The focused suite has not been run locally yet.

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

Generated-by: Codex (GPT-5)

Closes #57816 from zhengruifeng/ml_fpgrowth_temp_rules_column.

Authored-by: Ruifeng Zheng <ruifengz@apache.org>
Signed-off-by: Ruifeng Zheng <ruifengz@foxmail.com>
(cherry picked from commit 5aeb251)
Signed-off-by: Ruifeng Zheng <ruifengz@foxmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants