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 + } } } }
