11from pyspark .sql import SparkSession
22from .sequence import SequenceOfItems
3+ import importlib .resources as pkg_resources
4+
5+ with pkg_resources .path ("jsoniq.jars" , "rumbledb-1.24.0.jar" ) as jar_path :
6+ print ("Found Rumble JAR at:" , jar_path )
7+ jar_path_str = "file://" + str (jar_path )
38
49class MetaRumbleSession (type ):
510 def __getattr__ (cls , item ):
6- print (f"Dynamically handled: { item } " )
711 if item == "builder" :
812 return cls ._builder
913 else :
1014 return getattr (SparkSession , item )
1115
1216class RumbleSession (object , metaclass = MetaRumbleSession ):
1317 def __init__ (self , spark_session : SparkSession ):
14- print ("Initializing RumbleSession object" );
1518 self ._sparksession = spark_session
1619 self ._jrumblesession = spark_session ._jvm .org .rumbledb .api .Rumble (spark_session ._jsparkSession )
1720
1821 class Builder :
1922 def __init__ (self ):
20- self ._sparkbuilder = SparkSession .builder .config ("spark.jars" , "file:///Users/ghislain/Code/rumble/target/rumbledb-1.24.0-jar-with-dependencies.jar" )
23+ self ._sparkbuilder = SparkSession .builder .config ("spark.jars" , jar_path_str )
2124
2225 def getOrCreate (self ):
23- print ("getOrCreate called" );
2426 return RumbleSession (self ._sparkbuilder .getOrCreate ())
2527
2628 def appName (self , name ):
27- print (f"Setting app name: { name } " );
2829 self ._sparkbuilder = self ._sparkbuilder .appName (name );
2930 return self ;
3031
3132 def master (self , url ):
32- print (f"Setting master URL: { url } " );
3333 self ._sparkbuilder = self ._sparkbuilder .master (url );
3434 return self ;
3535
3636 def config (self , key , value ):
37- print (f"Setting config: { key } = { value } " );
3837 self ._sparkbuilder = self ._sparkbuilder .config (key , value );
3938 return self ;
4039
4140 def config (self , conf ):
42- print (f"Setting config: { conf } " );
4341 self ._sparkbuilder = self ._sparkbuilder .config (conf );
4442 return self ;
4543
4644 def __getattr__ (self , name ):
47- print (f"Calling attribute: { name } " );
4845 res = getattr (self ._sparkbuilder , name );
4946 return res ;
5047
5148 _builder = Builder ()
5249
5350 def bindDataFrameAsVariable (self , name : str , df ):
54- print (f"Binding DataFrame as variable: { name } " );
5551 conf = self ._jrumblesession .getConfiguration ();
5652 if not name .startswith ("$" ):
5753 raise ValueError ("Variable name must start with a dollar symbol ('$')." )
@@ -61,8 +57,7 @@ def bindDataFrameAsVariable(self, name: str, df):
6157
6258 def jsoniq (self , str ):
6359 sequence = self ._jrumblesession .runQuery (str );
64- return SequenceOfItems (sequence );
60+ return SequenceOfItems (sequence , self . _sparksession . sparkContext );
6561
6662 def __getattr__ (self , item ):
67- print (f"Accessing attribute: { item } " )
6863 return getattr (self ._sparksession , item )
0 commit comments