diff --git a/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxSparkPlanExecApi.scala b/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxSparkPlanExecApi.scala index be21337d994..b4f027acc68 100644 --- a/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxSparkPlanExecApi.scala +++ b/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxSparkPlanExecApi.scala @@ -470,6 +470,12 @@ class VeloxSparkPlanExecApi extends SparkPlanExecApi with Logging { } } } + case _: KeyGroupedPartitioning => + FallbackTags.add( + shuffle, + ValidationResult.failed( + "KeyGroupedPartitioning is not supported by Gluten native shuffle")) + shuffle.withNewChildren(child :: Nil) case _ => ColumnarShuffleExchangeExec(shuffle, child, null) } diff --git a/backends-velox/src/main/scala/org/apache/spark/sql/execution/utils/ExecUtil.scala b/backends-velox/src/main/scala/org/apache/spark/sql/execution/utils/ExecUtil.scala index dcfa0ee525c..e55927b9141 100644 --- a/backends-velox/src/main/scala/org/apache/spark/sql/execution/utils/ExecUtil.scala +++ b/backends-velox/src/main/scala/org/apache/spark/sql/execution/utils/ExecUtil.scala @@ -19,6 +19,7 @@ package org.apache.spark.sql.execution.utils import org.apache.gluten.backendsapi.BackendsApiManager import org.apache.gluten.columnarbatch.{ColumnarBatches, VeloxColumnarBatches} import org.apache.gluten.config.ShuffleWriterType +import org.apache.gluten.exception.GlutenNotSupportException import org.apache.gluten.iterator.Iterators import org.apache.gluten.memory.arrow.alloc.ArrowBufferAllocators import org.apache.gluten.runtime.Runtimes @@ -172,6 +173,9 @@ object ExecUtil { // range partitioning fall back to row-based partition id computation case RangePartitioning(orders, n) => new NativePartitioning(GlutenShuffleUtils.RangePartitioningShortName, n) + case other => + throw new GlutenNotSupportException( + s"Partitioning ${other.getClass.getSimpleName} is not supported by native shuffle") } val isRoundRobin = newPartitioning.isInstanceOf[RoundRobinPartitioning] &&