You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2026/03/09 07:26:30 UTC

(sedona) 01/01: [GH-2640] Simplify warning messages of SedonaContext.create()

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 <ji...@apache.org>
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)
+    }
   }
 }