This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch fix-rs-function-warning-messages
in repository https://gitbox.apache.org/repos/asf/sedona.git

commit 6ab262ffbc59eff2923e82eae1d892dc30f4ffe8
Author: Jia Yu <[email protected]>
AuthorDate: Mon Mar 9 00:26:13 2026 -0700

    [GH-2640] Simplify warning messages of SedonaContext.create()
    
    Skip duplicate registration of UDT types and raster aggregate functions 
when SedonaContext.create() is called multiple times, eliminating spurious 
warning messages.
---
 .../main/scala/org/apache/sedona/sql/RasterRegistrator.scala | 10 +++++++---
 .../sql/sedona_sql/UDT/RasterUdtRegistratorWrapper.scala     |  4 +++-
 .../spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala     | 12 +++++++++---
 .../spark/sql/sedona_viz/UDT/UdtRegistratorWrapper.scala     | 12 ++++++++----
 4 files changed, 27 insertions(+), 11 deletions(-)

diff --git 
a/spark/common/src/main/scala/org/apache/sedona/sql/RasterRegistrator.scala 
b/spark/common/src/main/scala/org/apache/sedona/sql/RasterRegistrator.scala
index ee7aa8b0be..c852a3e2b6 100644
--- a/spark/common/src/main/scala/org/apache/sedona/sql/RasterRegistrator.scala
+++ b/spark/common/src/main/scala/org/apache/sedona/sql/RasterRegistrator.scala
@@ -31,9 +31,13 @@ object RasterRegistrator {
   def registerAll(sparkSession: SparkSession): Unit = {
     if (isGeoToolsAvailable) {
       RasterUdtRegistratorWrapper.registerAll(gridClassName)
-      sparkSession.udf.register(
-        RasterUdafCatalog.rasterAggregateExpression.getClass.getSimpleName,
-        functions.udaf(RasterUdafCatalog.rasterAggregateExpression))
+      val functionName = 
RasterUdafCatalog.rasterAggregateExpression.getClass.getSimpleName
+      val functionIdentifier = FunctionIdentifier(functionName)
+      if 
(!sparkSession.sessionState.functionRegistry.functionExists(functionIdentifier))
 {
+        sparkSession.udf.register(
+          functionName,
+          functions.udaf(RasterUdafCatalog.rasterAggregateExpression))
+      }
     }
   }
 
diff --git 
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUdtRegistratorWrapper.scala
 
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUdtRegistratorWrapper.scala
index 23e5a6a070..9a769f5c0a 100644
--- 
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUdtRegistratorWrapper.scala
+++ 
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUdtRegistratorWrapper.scala
@@ -23,6 +23,8 @@ import org.apache.spark.sql.types.UDTRegistration
 object RasterUdtRegistratorWrapper {
 
   def registerAll(gridClassName: String): Unit = {
-    UDTRegistration.register(gridClassName, classOf[RasterUDT].getName)
+    if (!UDTRegistration.exists(gridClassName)) {
+      UDTRegistration.register(gridClassName, classOf[RasterUDT].getName)
+    }
   }
 }
diff --git 
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
 
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
index 2a9b0b397c..9b0179fce6 100644
--- 
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
+++ 
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
@@ -26,8 +26,14 @@ import org.locationtech.jts.index.SpatialIndex
 object UdtRegistratorWrapper {
 
   def registerAll(): Unit = {
-    UDTRegistration.register(classOf[Geometry].getName, 
classOf[GeometryUDT].getName)
-    UDTRegistration.register(classOf[Geography].getName, 
classOf[GeographyUDT].getName)
-    UDTRegistration.register(classOf[SpatialIndex].getName, 
classOf[IndexUDT].getName)
+    registerIfNotExists(classOf[Geometry].getName, 
classOf[GeometryUDT].getName)
+    registerIfNotExists(classOf[Geography].getName, 
classOf[GeographyUDT].getName)
+    registerIfNotExists(classOf[SpatialIndex].getName, 
classOf[IndexUDT].getName)
+  }
+
+  private def registerIfNotExists(userClass: String, udtClass: String): Unit = 
{
+    if (!UDTRegistration.exists(userClass)) {
+      UDTRegistration.register(userClass, udtClass)
+    }
   }
 }
diff --git 
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_viz/UDT/UdtRegistratorWrapper.scala
 
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_viz/UDT/UdtRegistratorWrapper.scala
index 3f5d952d8d..6c7b9b230d 100644
--- 
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_viz/UDT/UdtRegistratorWrapper.scala
+++ 
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_viz/UDT/UdtRegistratorWrapper.scala
@@ -24,9 +24,13 @@ import org.apache.spark.sql.types.UDTRegistration
 
 object UdtRegistratorWrapper {
   def registerAll(): Unit = {
-    UDTRegistration.register(
-      classOf[ImageSerializableWrapper].getName,
-      classOf[ImageWrapperUDT].getName)
-    UDTRegistration.register(classOf[Pixel].getName, classOf[PixelUDT].getName)
+    if (!UDTRegistration.exists(classOf[ImageSerializableWrapper].getName)) {
+      UDTRegistration.register(
+        classOf[ImageSerializableWrapper].getName,
+        classOf[ImageWrapperUDT].getName)
+    }
+    if (!UDTRegistration.exists(classOf[Pixel].getName)) {
+      UDTRegistration.register(classOf[Pixel].getName, 
classOf[PixelUDT].getName)
+    }
   }
 }

Reply via email to