2017-09-15 72 views
0

我需要做类似下面的事情。我可以调用两次SparkContext构造函数吗?

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属性。但为了了解主人,我首先必须创建一个SparkContext对象。设置conf属性后,我显然创建了另一个SparkContext对象。这很好吗?或者Spark会忽略我的第二个构造函数?如果是这种情况,那么在创建SparkContext对象之前,我可以通过其他方式找到有关主(无论是本地还是集群模式)的主机?

+0

您也可以通过spark submit命令传递您的配置。 'spark-submit --conf spark.ui.port = 6123' – philantrovert

+0

这和这个问题有什么关系? – pythonic

+0

根据主设备,我误解了你设置conf参数的问题。 – philantrovert

回答

2

同时启动多个上下文会产生错误。

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

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

虽然这样做很愚蠢,但您可以从spark conf中获取主控,而无需启动火花上下文。

conf.get("spark.master") 
+0

是的,我也问过这个问题,你可以用conf来得到spark.master。感谢你的回答! – pythonic

相关问题