如何更新现有的SparkSession实例或在spark-shell中创建一个新实例?

时间:2018-01-05 13:10:46

标签: scala apache-spark apache-spark-sql

当我启动spark-shell时,它会创建一个SparkSession的实例。但是,我应该按如下方式创建它:

val spark = SparkSession.builder()
                        .config("es.nodes",elasticHost)
                        .config("es.port",elasticPort)
                        .config("es.nodes.wan.only","true")
                        .appName("Test")
                        .getOrCreate()

如何更新spark中的现有spark-shell或创建新的Token[] ps = new Token[lengthOfArray]; //main function and function call etc public boolean find(Token token, int index) { if (index < ps.length) { if (ps[index] == token) { System.out.println("Searching at " + index); return true; } else { find(token, index++); } } return false; } ,如上所示?

1 个答案:

答案 0 :(得分:1)

您可以使用SparkSession.conf.set设置配置属性,或使用SparkSession.newSession创建另一个SparkSession实例,然后设置属性。

  

set(key:String,value:String):Unit 设置给定的Spark运行时配置属性。

     

newSession():SparkSession 使用隔离的SQL配置启动新会话,临时表,已注册的函数被隔离,但共享底层的SparkContext和缓存数据。

两种方式(差不多)相同,不同之处在于您可以暂时将属性设置为新值并同时使用两个SparkSession

// hello property is not set
scala> spark.conf.getOption("hello")
res1: Option[String] = None

scala> spark.conf.set("hello", "world")

// hello property is set
scala> spark.conf.getOption("hello")
res3: Option[String] = Some(world)

// create a new SparkSession (so you'll have two at the same time)
val ns = spark.newSession

// hello is not set in a new session
scala> ns.conf.getOption("hello")
res4: Option[String] = None

ns.conf.set("hello", "hello in another session")

scala> ns.conf.getOption("hello")
res8: Option[String] = Some(hello in another session)

// the value of hello in the initial SparkSession remains unchanged
scala> spark.conf.getOption("hello")
res9: Option[String] = Some(world)