次の2との違いは何ですか?SparkSessionが閉じられていないとどうなりますか?
object Example1 {
def main(args: Array[String]): Unit = {
try {
val spark = SparkSession.builder.getOrCreate
// spark code here
} finally {
spark.close
}
}
}
object Example2 {
val spark = SparkSession.builder.getOrCreate
def main(args: Array[String]): Unit = {
// spark code here
}
}
私は、SparkSessionがCloseableを実装していることを知っており、それを閉じる必要があることを知っています。しかし、SparkSessionがExample2のように作成されただけで、決して直接クローズしないと、私は何の問題も考えることができません。 Sparkアプリケーションが正常に終了した場合(メインメソッドを終了した場合)、JVMは終了し、SparkSessionは終了します。これは正しいです? IMO:SparkSessionがシングルトンであるという事実は、大きな違いをもたらすべきではありません。
私が間違っていてもスパークアプリケーションが成功するか失敗するかを修正してください。いずれの場合も、Sparkアプリケーションは終了し、関連するJVMも終了します。 JVMが終了すると、すべてのリソースが解放されます(私が閉じるかどうかにかかわらず)。また、 'getOrCreate()'を使うと、SparkSessionはシングルトンではありませんか? 「あなたはSparkSessionsを好きなだけたくさん持てますか?」とはどういう意味ですか?ありがとう! – Gevorg
ここでは2つの質問があります:最終結果にかかわらず - 失敗または成功 - 最終的には、スコアとメモリがクラスタ上で解放され、利用可能になります。2) 'SparkSession' **がシングルトンであるため、 spark.newSessionを実行して他のセッションと分離することもできます。 –