我可以调用 SparkContext 构造函数两次吗?

Posted

技术标签:

【中文标题】我可以调用 SparkContext 构造函数两次吗?【英文标题】:Can I call the SparkContext constructor twice? 【发布时间】:2017-09-15 17:34:50 【问题描述】:

我需要执行以下操作。

val conf = new SparkConf().setAppName("MyApp")
val master = new SparkContext(conf).master

if (master == "local[*]") // running locally

  conf.set(...)
  conf.set(...)

else // running on a cluster

  conf.set(...)
  conf.set(...)


val sc = new SparkContext(conf)

我首先检查我是在本地模式还是集群模式下运行,并相应地设置 conf 属性。但是为了了解master,我首先要创建一个SparkContext对象。在设置了 conf 属性之后,我显然创建了另一个 SparkContext 对象。这样好吗?或者 Spark 会忽略我的第二个构造函数?如果是这种情况,在创建 SparkContext 对象之前,我可以通过哪些其他方式找到有关主服务器(无论是本地还是集群模式)的信息?

【问题讨论】:

您也可以使用 spark submit 命令传递您的配置。 spark-submit --conf spark.ui.port=6123 这和这个问题有什么关系? 我误读了您关于根据主人设置conf参数的问题。 【参考方案1】:

同时启动多个上下文会报错。

您可以通过在创建第二个上下文之前停止第一个上下文来解决此问题。

master.stop()
val sc = new SparkContext(conf)

这样做很愚蠢,您可以从 spark conf 中获取 master,而无需启动 spark 上下文。

conf.get("spark.master")

【讨论】:

是的,我也是这么问的,你能不能只用conf获得spark.master。感谢您的回答!

以上是关于我可以调用 SparkContext 构造函数两次吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥构造函数被调用两次

tomcat服务器启动,Filter 的构造函数被调用了两次,doFilter函数调用了一次,

SparkContext主构造函数代码提取

Angular 组件构造函数被调用两次

为啥析构函数被调用两次而构造函数只被调用一次?

为啥自动对象的析构函数被调用两次?