@@ -20,11 +20,7 @@ def build_spark_session(app_name: str) -> SparkSession:
2020 )
2121
2222
23- def build_paimon_spark_session (app_name : str , warehouse : str | None = None ) -> SparkSession :
24- os .environ .pop ("SPARK_HOME" , None )
25- os .environ ["PYSPARK_PYTHON" ] = sys .executable
26- os .environ ["PYSPARK_DRIVER_PYTHON" ] = sys .executable
27-
23+ def _reset_spark_state () -> None :
2824 active_session = SparkSession .getActiveSession ()
2925 if active_session is not None :
3026 active_session .stop ()
@@ -38,8 +34,60 @@ def build_paimon_spark_session(app_name: str, warehouse: str | None = None) -> S
3834 SparkContext ._gateway = None
3935 SparkContext ._jvm = None
4036
37+
38+ def build_paimon_spark_session (app_name : str , warehouse : str | None = None ) -> SparkSession :
39+ os .environ .pop ("SPARK_HOME" , None )
40+ os .environ ["PYSPARK_PYTHON" ] = sys .executable
41+ os .environ ["PYSPARK_DRIVER_PYTHON" ] = sys .executable
42+
43+ _reset_spark_state ()
44+
45+ gravitino_uri = os .environ .get ("GRAVITINO_URI" )
46+
47+ if gravitino_uri :
48+ return _build_gravitino_paimon_session (app_name , gravitino_uri )
49+
50+ return _build_direct_paimon_session (app_name , warehouse )
51+
52+
53+ def _build_gravitino_paimon_session (app_name : str , gravitino_uri : str ) -> SparkSession :
54+ gravitino_metalake = os .environ .get ("GRAVITINO_METALAKE" , "ai_observability" )
55+ paimon_package = os .environ .get (
56+ "PAIMON_SPARK_PACKAGE" , "org.apache.paimon:paimon-spark-3.5:1.2.0"
57+ )
58+ gravitino_package = os .environ .get (
59+ "GRAVITINO_SPARK_PACKAGE" ,
60+ "org.apache.gravitino:gravitino-spark-connector-runtime-3.5_2.12:1.2.0" ,
61+ )
62+
63+ return (
64+ SparkSession .builder .appName (app_name )
65+ .master ("local[*]" )
66+ .config ("spark.sql.session.timeZone" , "UTC" )
67+ .config ("spark.jars.packages" , f"{ paimon_package } ,{ gravitino_package } " )
68+ .config ("spark.jars.excludes" , "org.slf4j:slf4j-api" )
69+ .config ("spark.sql.gravitino.uri" , gravitino_uri )
70+ .config ("spark.sql.gravitino.metalake" , gravitino_metalake )
71+ .config ("spark.sql.gravitino.enablePaimonSupport" , "true" )
72+ .config (
73+ "spark.sql.catalog.paimon_lake" ,
74+ "org.apache.gravitino.spark.connector.GravitinoCatalog" ,
75+ )
76+ .config (
77+ "spark.sql.extensions" ,
78+ "org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions" ,
79+ )
80+ .config ("spark.driver.host" , "127.0.0.1" )
81+ .config ("spark.driver.bindAddress" , "127.0.0.1" )
82+ .getOrCreate ()
83+ )
84+
85+
86+ def _build_direct_paimon_session (app_name : str , warehouse : str | None ) -> SparkSession :
4187 wh = warehouse or os .environ .get ("PAIMON_WAREHOUSE" , "data/paimon" )
42- paimon_package = os .environ .get ("PAIMON_SPARK_PACKAGE" , "org.apache.paimon:paimon-spark-3.5:1.2.0" )
88+ paimon_package = os .environ .get (
89+ "PAIMON_SPARK_PACKAGE" , "org.apache.paimon:paimon-spark-3.5:1.2.0"
90+ )
4391
4492 return (
4593 SparkSession .builder .appName (app_name )
@@ -49,7 +97,10 @@ def build_paimon_spark_session(app_name: str, warehouse: str | None = None) -> S
4997 .config ("spark.jars.excludes" , "org.slf4j:slf4j-api" )
5098 .config ("spark.sql.catalog.paimon_lake" , "org.apache.paimon.spark.SparkCatalog" )
5199 .config ("spark.sql.catalog.paimon_lake.warehouse" , wh )
52- .config ("spark.sql.extensions" , "org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions" )
100+ .config (
101+ "spark.sql.extensions" ,
102+ "org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions" ,
103+ )
53104 .config ("spark.driver.host" , "127.0.0.1" )
54105 .config ("spark.driver.bindAddress" , "127.0.0.1" )
55106 .getOrCreate ()
0 commit comments