2016-11-20 1 views
7

私はpySparkでSpark 2.0を使用しています。Spark 2.0:GetOrCreateでSparkSessionパラメータを再定義し、WebUIで変更を表示しない

私は2.0で導入されたGetOrCreate方法を通じてSparkSessionパラメータを再定義しています。そこに有効なグローバルなデフォルトSparkSessionであり、そうならば、その1を返すかどうかをこのメソッドに

最初のチェックを。有効なグローバルデフォルトSparkSessionが存在しない場合、このメソッドは新しいSparkSessionを作成し、新しく作成されたSparkSessionをグローバルデフォルトに割り当てます。

既存のSparkSessionが返された場合、このBuilderで指定された設定オプションが既存のSparkSessionに適用されます。

from pyspark import SparkConf 

SparkConf().toDebugString() 
'spark.app.name=pyspark-shell\nspark.master=local[2]\nspark.submit.deployMode=client' 

spark.conf.get("spark.app.name") 
'pyspark-shell' 

は、その後、私は

のappName(名前)
設定のWebUIの変化を見るために約束してSparkSession設定を再定義:

これまでのところは良い

https://spark.apache.org/docs/2.0.1/api/python/pyspark.sql.html#pyspark.sql.SparkSession.Builder.getOrCreate Spark Web UIに表示されるアプリケーションの名前です。今

https://spark.apache.org/docs/2.0.1/api/python/pyspark.sql.html#pyspark.sql.SparkSession.Builder.appName

c = SparkConf() 
(c 
.setAppName("MyApp") 
.setMaster("local") 
.set("spark.driver.memory","1g") 
) 

from pyspark.sql import SparkSession 
(SparkSession 
.builder 
.enableHiveSupport() # metastore, serdes, Hive udf 
.config(conf=c) 
.getOrCreate()) 

spark.conf.get("spark.app.name") 
'MyApp' 

私はlocalhost:4040に行くとき、私は、アプリ名としてMyApp見ることを期待します。

しかし、私はまだ私は間違っpyspark-shell application UI

を参照してください?

ありがとうございます!

答えて

6

私はそのドキュメントは少しここで誤解されていて、スカラ座で作業するときに、実際にこのような警告を参照してください信じて:

前の状況を明確に分離して2.0をスパークするのが明らかだった。

  • SparkContext実行時に設定を変更することはできません。まず、既存のコンテキストを停止する必要があります。
  • SQLContext設定は実行時に変更できます。
  • spark.app.nameは、他の多くのオプションと同様にSparkContextにバインドされており、コンテキストを停止することなく変更することはできません。spark.app.name設定が更新されている間SparkContext/SparkSession

    import org.apache.spark.SparkConf 
    import 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() 
    
    ... WARN SparkSession$Builder: Use an existing SparkSession ... 
    spark: org.apache.spark.sql.SparkSession = ... 
    
    spark.conf.get("spark.sql.shuffle.partitions") 
    
    String = 2001 
    

    を既存の再利用

    spark.conf.get("spark.app.name") 
    
    String = foo 
    

    それはSparkContextには影響しません:

    今度は、セッションを停止し、プロセスを繰り返してみましょう、既存のSparkContext/SparkSession

    を停止

    spark.sparkContext.appName 
    
    String = Spark shell 
    

    興味深いことに
    spark.stop 
    val spark = SparkSession.builder.config(conf).getOrCreate() 
    
    ... WARN SparkContext: Use an existing SparkContext ... 
    spark: org.apache.spark.sql.SparkSession = ... 
    
    spark.sparkContext.appName 
    
    String = foo 
    

    我々は、我々はまだ、既存のSparkContextの使用に関する警告を得るが、あなたはそれを確認することができ、セッションが実際に停止されて停止します。

    関連する問題