This is an automated email from the ASF dual-hosted git repository.
philo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git
The following commit(s) were added to refs/heads/main by this push:
new 2780799db [GLUTEN-5001][CORE] Support mapping to native function for
HiveGenericUDF (#5002)
2780799db is described below
commit 2780799db5e37470c5ca6a4f21c336491ce4f808
Author: WangGuangxin <[email protected]>
AuthorDate: Wed Mar 20 14:09:53 2024 +0800
[GLUTEN-5001][CORE] Support mapping to native function for HiveGenericUDF
(#5002)
---
.../expression/ExpressionConverter.scala | 6 ++--
...FTransformer.scala => HiveUDFTransformer.scala} | 32 ++++++++++++----------
2 files changed, 21 insertions(+), 17 deletions(-)
diff --git
a/gluten-core/src/main/scala/io/glutenproject/expression/ExpressionConverter.scala
b/gluten-core/src/main/scala/io/glutenproject/expression/ExpressionConverter.scala
index 278f40dd8..f407d14d6 100644
---
a/gluten-core/src/main/scala/io/glutenproject/expression/ExpressionConverter.scala
+++
b/gluten-core/src/main/scala/io/glutenproject/expression/ExpressionConverter.scala
@@ -31,7 +31,7 @@ import
org.apache.spark.sql.catalyst.optimizer.NormalizeNaNAndZero
import org.apache.spark.sql.execution.{ScalarSubquery, _}
import org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanExec
import org.apache.spark.sql.execution.exchange.BroadcastExchangeExec
-import org.apache.spark.sql.hive.HiveSimpleUDFTransformer
+import org.apache.spark.sql.hive.HiveUDFTransformer
import org.apache.spark.sql.internal.SQLConf
import org.apache.spark.sql.types._
@@ -112,8 +112,8 @@ object ExpressionConverter extends SQLConfHelper with
Logging {
return replacePythonUDFWithExpressionTransformer(p, attributeSeq,
expressionsMap)
case s: ScalaUDF =>
return replaceScalaUDFWithExpressionTransformer(s, attributeSeq,
expressionsMap)
- case _ if HiveSimpleUDFTransformer.isHiveSimpleUDF(expr) =>
- return HiveSimpleUDFTransformer.replaceWithExpressionTransformer(expr,
attributeSeq)
+ case _ if HiveUDFTransformer.isHiveUDF(expr) =>
+ return HiveUDFTransformer.replaceWithExpressionTransformer(expr,
attributeSeq)
case _ =>
}
diff --git
a/gluten-core/src/main/scala/org/apache/spark/sql/hive/HiveSimpleUDFTransformer.scala
b/gluten-core/src/main/scala/org/apache/spark/sql/hive/HiveUDFTransformer.scala
similarity index 61%
rename from
gluten-core/src/main/scala/org/apache/spark/sql/hive/HiveSimpleUDFTransformer.scala
rename to
gluten-core/src/main/scala/org/apache/spark/sql/hive/HiveUDFTransformer.scala
index 1672648b3..5363ad139 100644
---
a/gluten-core/src/main/scala/org/apache/spark/sql/hive/HiveSimpleUDFTransformer.scala
+++
b/gluten-core/src/main/scala/org/apache/spark/sql/hive/HiveUDFTransformer.scala
@@ -16,16 +16,17 @@
*/
package org.apache.spark.sql.hive
+import io.glutenproject.exception.GlutenNotSupportException
import io.glutenproject.expression.{ExpressionConverter,
ExpressionTransformer, GenericExpressionTransformer, UDFMappings}
import org.apache.spark.sql.catalyst.expressions._
import java.util.Locale
-object HiveSimpleUDFTransformer {
- def isHiveSimpleUDF(expr: Expression): Boolean = {
+object HiveUDFTransformer {
+ def isHiveUDF(expr: Expression): Boolean = {
expr match {
- case _: HiveSimpleUDF => true
+ case _: HiveSimpleUDF | _: HiveGenericUDF => true
case _ => false
}
}
@@ -33,23 +34,26 @@ object HiveSimpleUDFTransformer {
def replaceWithExpressionTransformer(
expr: Expression,
attributeSeq: Seq[Attribute]): ExpressionTransformer = {
- if (!isHiveSimpleUDF(expr)) {
- throw new UnsupportedOperationException(s"Expression $expr is not a
HiveSimpleUDF")
+ val udfName = expr match {
+ case s: HiveSimpleUDF =>
+ s.name.stripPrefix("default.")
+ case g: HiveGenericUDF =>
+ g.name.stripPrefix("default.")
+ case _ =>
+ throw new GlutenNotSupportException(
+ s"Expression $expr is not a HiveSimpleUDF or HiveGenericUDF")
}
- val udf = expr.asInstanceOf[HiveSimpleUDF]
- val substraitExprName =
-
UDFMappings.hiveUDFMap.get(udf.name.stripPrefix("default.").toLowerCase(Locale.ROOT))
- substraitExprName match {
+ UDFMappings.hiveUDFMap.get(udfName.toLowerCase(Locale.ROOT)) match {
case Some(name) =>
GenericExpressionTransformer(
name,
- ExpressionConverter.replaceWithExpressionTransformer(udf.children,
attributeSeq),
- udf)
+ ExpressionConverter.replaceWithExpressionTransformer(expr.children,
attributeSeq),
+ expr)
case _ =>
- throw new UnsupportedOperationException(
- s"Not supported hive simple udf:$udf"
- + s" name:${udf.name} hiveUDFMap:${UDFMappings.hiveUDFMap}")
+ throw new GlutenNotSupportException(
+ s"Not supported hive udf:$expr"
+ + s" name:$udfName hiveUDFMap:${UDFMappings.hiveUDFMap}")
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]