Skip to content

Commit f9e8056

Browse files
committed
feat: add CometMapSort serializer
1 parent 9786e43 commit f9e8056

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ object QueryPlanSerde extends Logging with CometExprShim {
126126
classOf[MapKeys] -> CometMapKeys,
127127
classOf[MapEntries] -> CometMapEntries,
128128
classOf[MapValues] -> CometMapValues,
129-
classOf[MapFromArrays] -> CometMapFromArrays)
129+
classOf[MapFromArrays] -> CometMapFromArrays,
130+
classOf[MapSort] -> CometMapSort)
130131

131132
private val structExpressions: Map[Class[_ <: Expression], CometExpressionSerde[_]] = Map(
132133
classOf[CreateNamedStruct] -> CometCreateNamedStruct,

spark/src/main/scala/org/apache/comet/serde/maps.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
package org.apache.comet.serde
2121

2222
import org.apache.spark.sql.catalyst.expressions._
23+
import org.apache.spark.sql.catalyst.expressions.objects.RowOrdering
2324
import org.apache.spark.sql.types.{ArrayType, MapType}
2425

26+
import org.apache.comet.CometSparkSessionExtensions.withInfo
2527
import org.apache.comet.serde.QueryPlanSerde.{exprToProtoInternal, optExprWithInfo, scalarFunctionExprToProto, scalarFunctionExprToProtoWithReturnType}
2628

2729
object CometMapKeys extends CometExpressionSerde[MapKeys] {
@@ -89,3 +91,21 @@ object CometMapFromArrays extends CometExpressionSerde[MapFromArrays] {
8991
optExprWithInfo(mapFromArraysExpr, expr, expr.children: _*)
9092
}
9193
}
94+
95+
object CometMapSort extends CometExpressionSerde[MapSort] {
96+
97+
override def convert(
98+
expr: MapSort,
99+
inputs: Seq[Attribute],
100+
binding: Boolean): Option[ExprOuterClass.Expr] = {
101+
val keyType = expr.base.dataType.asInstanceOf[MapType].keyType
102+
if (!RowOrdering.isOrderable(keyType)) {
103+
withInfo(expr, s"map_sort requires orderable key type, got: $keyType")
104+
return None
105+
}
106+
107+
val childExpr = exprToProtoInternal(expr.base, inputs, binding)
108+
val mapSortScalarExpr = scalarFunctionExprToProto("map_sort", childExpr)
109+
optExprWithInfo(mapSortScalarExpr, expr, expr.children: _*)
110+
}
111+
}

0 commit comments

Comments
 (0)