Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark 2.0:通过GetOrCreate重新定义SparkSession参数,但在WebUI中看不到更改_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

Apache spark Spark 2.0:通过GetOrCreate重新定义SparkSession参数,但在WebUI中看不到更改

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

我在PySpark上使用Spark 2.0

我正在通过2.0中引入的
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

我遇到了同样的问题,为此苦苦挣扎了好几年