This is an automated email from the ASF dual-hosted git repository. taiyang-li pushed a commit to branch fake_add_bolt_backend in repository https://gitbox.apache.org/repos/asf/gluten.git
commit 90e224a833580f4673559be742e0412e83de1df0 Author: liyang.127 <[email protected]> AuthorDate: Sat Jun 27 21:18:02 2026 +0800 [GLUTEN][CORE] Add backend hook for sort aggregate offload --- .../org/apache/gluten/backendsapi/SparkPlanExecApi.scala | 11 +++++++++++ .../extension/columnar/offload/OffloadSingleNodeRules.scala | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala b/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala index 79f3d67c0e..ee347c183e 100644 --- a/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala +++ b/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala @@ -37,6 +37,7 @@ import org.apache.spark.sql.catalyst.optimizer.BuildSide import org.apache.spark.sql.catalyst.plans.JoinType import org.apache.spark.sql.catalyst.plans.physical.{BroadcastMode, Partitioning} import org.apache.spark.sql.execution._ +import org.apache.spark.sql.execution.aggregate.BaseAggregateExec import org.apache.spark.sql.execution.datasources.FileFormat import org.apache.spark.sql.execution.exchange.ShuffleExchangeExec import org.apache.spark.sql.execution.joins.BuildSideRelation @@ -102,6 +103,16 @@ trait SparkPlanExecApi { resultExpressions, child) + /** + * Offload a [[org.apache.spark.sql.execution.aggregate.SortAggregateExec]] to a columnar + * transformer. By default it goes through [[HashAggregateExecBaseTransformer.fromSortAggregate]] + * so that the result is tagged as a sort-based aggregate (used by sort elimination rules). + * Backends that do not need the sort-based semantic can override this to fall back to a regular + * hash aggregate transformer. + */ + def offloadSortAggregate(plan: BaseAggregateExec): HashAggregateExecBaseTransformer = + HashAggregateExecBaseTransformer.fromSortAggregate(plan) + /** Generate HashAggregateExecPullOutHelper */ def genHashAggregateExecPullOutHelper( aggregateExpressions: Seq[AggregateExpression], diff --git a/gluten-substrait/src/main/scala/org/apache/gluten/extension/columnar/offload/OffloadSingleNodeRules.scala b/gluten-substrait/src/main/scala/org/apache/gluten/extension/columnar/offload/OffloadSingleNodeRules.scala index 3d844607b3..19c2fc40e7 100644 --- a/gluten-substrait/src/main/scala/org/apache/gluten/extension/columnar/offload/OffloadSingleNodeRules.scala +++ b/gluten-substrait/src/main/scala/org/apache/gluten/extension/columnar/offload/OffloadSingleNodeRules.scala @@ -215,7 +215,7 @@ object OffloadOthers { case plan: HashAggregateExec => HashAggregateExecBaseTransformer.from(plan) case plan: SortAggregateExec => - HashAggregateExecBaseTransformer.fromSortAggregate(plan) + BackendsApiManager.getSparkPlanExecApiInstance.offloadSortAggregate(plan) case plan: ObjectHashAggregateExec => HashAggregateExecBaseTransformer.from(plan) case plan: UnionExec => --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
