This is an automated email from the ASF dual-hosted git repository.
jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git
The following commit(s) were added to refs/heads/master by this push:
new f99332ef66 [GH-1868] Fix spark sql extension load failure when parser
failed to load (#1872)
f99332ef66 is described below
commit f99332ef66bd9f2cb1a0ed232fb52d6ad5e52a85
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
+ }
}
}
}