Apache spark Spark 2.0:通过GetOrCreate重新定义SparkSession参数,但在WebUI中看不到更改
我在PySpark上使用Spark 2.0 我正在通过2.0中引入的Apache spark Spark 2.0:通过GetOrCreate重新定义SparkSession参数,但在WebUI中看不到更改,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我在PySpark上使用Spark 2.0 我正在通过2.0中引入的GetOrCreate方法重新定义SparkSession参数: 此方法首先检查是否存在有效的全局默认SparkSession,如果是,则返回该全局默认SparkSession。如果不存在有效的全局默认SparkSession,则该方法将创建一个新的SparkSession,并将新创建的SparkSession指定为全局默认值 如果返回现有SparkSession,则此生成器中指定的配置选项将应用于现有SparkSession
GetOrCreate
方法重新定义SparkSession
参数:
此方法首先检查是否存在有效的全局默认SparkSession,如果是,则返回该全局默认SparkSession。如果不存在有效的全局默认SparkSession,则该方法将创建一个新的SparkSession,并将新创建的SparkSession指定为全局默认值
如果返回现有SparkSession,则此生成器中指定的配置选项将应用于现有SparkSession
到目前为止一切顺利:
来自pyspark导入SparkConf
SparkConf().toDebugString()
'spark.app.name=pyspark shell\nspark.master=local[2]\nspark.submit.deployMode=client'
spark.conf.get(“spark.app.name”)
“Pypark shell”
然后我重新定义了SparkSession
config,并承诺在WebUI中看到更改
appName(名称)设置应用程序的名称,该名称将显示在Spark web UI中
c=SparkConf()
(c)
.setAppName(“MyApp”)
.setMaster(“本地”)
.set(“spark.driver.memory”,“1g”)
)
从pyspark.sql导入SparkSession
(SparkSession)
建设者
.enableHiveSupport()#元存储、serdes、配置单元自定义项
.config(conf=c)
.getOrCreate())
spark.conf.get(“spark.app.name”)
“我的应用程序”
现在,当我转到localhost:4040
时,我希望看到MyApp
作为应用程序名称
但是,我仍然可以看到pysparkshell应用程序UI
我错在哪里
提前谢谢 我认为文档在这里有点误导,当您使用Scala时,实际上会看到如下警告:
... WARN SparkSession$Builder: Use an existing SparkSession, some configuration may not take effect.
在Spark 2.0之前更明显的是,上下文之间有明显的分离:
无法在运行时修改配置。您必须首先停止现有的上下文SparkContext
可以在运行时修改配置李>SQLContext
spark.app.name
与许多其他选项一样,绑定到SparkContext
,并且在不停止上下文的情况下无法修改
重用现有的SparkContext
/SparkSession
import org.apache.spark.SparkConf
导入org.apache.spark.sql.SparkSession
spark.conf.get(“spark.sql.shuffle.partitions”)
String=200
val conf=new SparkConf()
.setAppName(“foo”)
.set(“spark.sql.shuffle.partitions”,“2001”)
val spark=SparkSession.builder.config(conf.getOrCreate())
。。。警告SparkSession$Builder:使用现有SparkSession。。。
spark:org.apache.spark.sql.SparkSession=。。。
spark.conf.get(“spark.sql.shuffle.partitions”)
String=2001
更新spark.app.name
config时:
spark.conf.get(“spark.app.name”)
String=foo
它不影响SparkContext的
spark.sparkContext.appName
String=火花壳
停止现有的SparkContext
/SparkSession
现在,让我们停止会话并重复此过程:
spark.stop
val spark=SparkSession.builder.config(conf.getOrCreate())
。。。警告SparkContext:使用现有SparkContext。。。
spark:org.apache.spark.sql.SparkSession=。。。
spark.sparkContext.appName
String=foo
有趣的是,当我们停止会话时,仍然会收到有关使用现有的SparkContext
的警告,但您可以检查它是否已实际停止。我认为文档在这里有点误导,当您使用Scala时,您实际上会看到这样的警告:
... WARN SparkSession$Builder: Use an existing SparkSession, some configuration may not take effect.
在Spark 2.0之前更明显的是,上下文之间有明显的分离:
SparkContext
无法在运行时修改配置。您必须首先停止现有的上下文
SQLContext
可以在运行时修改配置李>
spark.app.name
与许多其他选项一样,绑定到SparkContext
,并且在不停止上下文的情况下无法修改
重用现有的SparkContext
/SparkSession
import org.apache.spark.SparkConf
导入org.apache.spark.sql.SparkSession
spark.conf.get(“spark.sql.shuffle.partitions”)
String=200
val conf=new SparkConf()
.setAppName(“foo”)
.set(“spark.sql.shuffle.partitions”,“2001”)
val spark=SparkSession.builder.config(conf.getOrCreate())
。。。警告SparkSession$Builder:使用现有SparkSession。。。
spark:org.apache.spark.sql.SparkSession=。。。
spark.conf.get(“spark.sql.shuffle.partitions”)
String=2001
更新spark.app.name
config时:
spark.conf.get(“spark.app.name”)
String=foo
它不影响SparkContext的
spark.sparkContext.appName
String=火花壳
停止现有的SparkContext
/SparkSession
现在,让我们停止会话并重复此过程:
spark.stop
val spark=SparkSession.builder.config(conf.getOrCreate())
。。。警告SparkContext:使用现有SparkContext。。。
spark:org.apache.spark.sql.SparkSession=。。。
spark.sparkContext.appName
String=foo
有趣的是,当我们停止会话时,仍然会收到关于使用现有的SparkContext
的警告,但您可以检查它是否已实际停止。我遇到了相同的问题,并与之斗争了很长时间,然后找到了一个简单的解决方案:
spark.stop()
然后重新构建你的新sparksession我遇到了同样的问题,为此苦苦挣扎了好几年