2017-09-15 3 views
0

私は以下のようなことをする必要があります。SparkContextコンストラクタを2回呼び出すことはできますか?

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は私の2番目のコンストラクタを無視するでしょうか?その場合、SparkContextオブジェクトを作成する前に、どのような方法でマスター(ローカルかクラスタモードか)を見つけることができますか?

+0

spark submitコマンドでも設定を渡すことができます。 'spark-submit --conf spark.ui.port = 6123' – philantrovert

+0

そしてこれは質問と何が関係していますか? – pythonic

+0

マスターに応じてconfパラメータを設定するための質問を読みました。 – philantrovert

答えて

2

複数のコンテキストを同時に起動すると、エラーが発生します。

第2のコンテキストを作成する前に、最初のコンテキストを停止することで回避できます。

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

それはしかし、これを行うには愚かだ、あなたはスパークコンテキストを起動しなくても、スパークのconfからマスターを得ることができます。

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

はい、それも私が尋ねたものです。あなたはconfでspark.masterを入手できますか?答えをありがとう! – pythonic

関連する問題