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

jiayu pushed a commit to branch prepare-1.7.2
in repository https://gitbox.apache.org/repos/asf/sedona.git

commit 7a8a41f7d829a3c3eb84dab89634feba010ae750
Author: Feng Zhang <[email protected]>
AuthorDate: Thu Mar 20 16:19:25 2025 -0700

    [GH-1868] Fix spark sql extension load failure when parser failed to load 
(#1872)
    
    * [SEDONA-636] Fix spark sql extension load failure when parser failed to 
load
    
    * fix exception capture issue
---
 .../org/apache/sedona/sql/SedonaSqlExtensions.scala   | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git 
a/spark/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala 
b/spark/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala
index fbc3567192..2856a735bf 100644
--- 
a/spark/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala
+++ 
b/spark/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala
@@ -22,8 +22,11 @@ import org.apache.sedona.spark.SedonaContext
 import org.apache.spark.SparkContext
 import org.apache.spark.sql.SparkSessionExtensions
 import org.apache.spark.sql.parser.ParserFactory
+import org.slf4j.{Logger, LoggerFactory}
 
 class SedonaSqlExtensions extends (SparkSessionExtensions => Unit) {
+  val logger: Logger = LoggerFactory.getLogger(getClass)
+
   private lazy val enableParser =
     
SparkContext.getOrCreate().getConf.get("spark.sedona.enableParserExtension", 
"true").toBoolean
 
@@ -33,9 +36,23 @@ class SedonaSqlExtensions extends (SparkSessionExtensions => 
Unit) {
       _ => ()
     })
 
+    // Inject Sedona SQL parser
     if (enableParser) {
+      // Try to inject the Sedona SQL parser but gracefully handle 
initialization failures.
+      // This prevents extension loading errors from causing the SparkSession 
initialization to fail,
+      // allowing the application to continue running without the Sedona 
parser extension.
+      // Common failures include version incompatibilities between Spark and 
Sedona.
       e.injectParser { case (_, parser) =>
-        
ParserFactory.getParser("org.apache.sedona.sql.parser.SedonaSqlParser", parser)
+        try {
+          
ParserFactory.getParser("org.apache.sedona.sql.parser.SedonaSqlParser", parser)
+        } catch {
+          case parserInjectionException: Throwable =>
+            logger.warn(
+              s"Failed to inject Sedona SQL parser: 
${parserInjectionException.getMessage}",
+              parserInjectionException)
+            // Return the original parser instead of failing
+            parser
+        }
       }
     }
   }

Reply via email to