Scala 如何更新现有SparkSession实例或在spark shell中创建新实例?
当我启动Scala 如何更新现有SparkSession实例或在spark shell中创建新实例?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,当我启动sparkshell时,它会创建一个SparkSession的实例。但是,我应该按如下方式创建它: val spark = SparkSession.builder() .config("es.nodes",elasticHost) .config("es.port",elasticPort) .config("es.nodes.wan.only
sparkshell
时,它会创建一个SparkSession
的实例。但是,我应该按如下方式创建它:
val spark = SparkSession.builder()
.config("es.nodes",elasticHost)
.config("es.port",elasticPort)
.config("es.nodes.wan.only","true")
.appName("Test")
.getOrCreate()
如何更新
spark shell
中现有的spark
,或创建如上所示的新实例?您可以使用设置配置属性,或使用创建另一个SparkSession
实例,然后设置属性
set(key:String,value:String):Unit设置给定的Spark运行时配置属性
newSession():SparkSession使用隔离的SQL配置启动新会话,临时表、注册函数被隔离,但共享基础SparkContext和缓存数据
这两种方法的工作原理(几乎)相同,不同之处在于您可以临时将属性设置为新值,并同时使用这两种SparkSession
s
// 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)
你可以做spark shell--conf blah=blah,如果这对你有用的话