Spark Dataset 2.0は、2つの関数createOrReplaceTempView
とcreateGlobalTempView
を提供します。両方の機能の基本的な違いを理解できません。
APIドキュメント によると:
createOrReplaceTempView:この一時ビューの有効期間は、このデータセットの作成に使用された[[SparkSession]]に関連付けられています。
したがって、sparkSession.close()
を呼び出すと、定義されたものは破棄されます。本当ですか?
createGlobalTempView:この一時ビューの有効期間は、このSpark application。
このタイプのビューはいつ破棄されますか?任意の例。 sparkSession.close()?
_df.createOrReplaceTempView("tempViewName")
df.createGlobalTempView("tempViewName")
_
createOrReplaceTempView()
は、ローカルの一時ビューをこのデータフレームdfで作成または置換します。このビューの寿命はSparkSession
クラスに依存していますが、このビューを削除しますか?
_spark.catalog.dropTempView("tempViewName")
_
またはstop()
はセッションをシャットダウンします
_self.ss = SparkSession(sc)
...
self.ss.stop()
_
createGlobalTempView()
は、このデータフレームdfを使用してグローバル一時ビューを作成します。このビューの存続時間はsparkアプリケーション自体に依存します。ドロップしたい場合:
_spark.catalog.dropGlobalTempView("tempViewName")
_
またはstop()
はシャットダウンします
_ss = SparkContext(conf=conf, ......)
...
ss.stop()
_
あなたの質問への答えは、基本的にSpark Applicationとa Spark Session。
Sparkアプリケーションを使用できます:
一方、SparkSessionは、Spark Application:
グローバル一時ビューは、Spark 2.1.0リリースで導入されました。この機能は、異なるセッション間でデータを共有し、アプリケーションが終了するまで存続させたい場合に役立ちます。 createTempView
およびcreateGlobalTempView
の使用方法を示します
object NewSessionApp {
def main(args: Array[String]): Unit = {
val logFile = "data/README.md" // Should be some file on your system
val spark = SparkSession.
builder.
appName("Simple Application").
master("local").
getOrCreate()
val logData = spark.read.textFile(logFile).cache()
logData.createGlobalTempView("logdata")
spark.range(1).createTempView("foo")
// within the same session the foo table exists
println("""spark.catalog.tableExists("foo") = """ + spark.catalog.tableExists("foo"))
//spark.catalog.tableExists("foo") = true
// for a new session the foo table does not exists
val newSpark = spark.newSession
println("""newSpark.catalog.tableExists("foo") = """ + newSpark.catalog.tableExists("foo"))
//newSpark.catalog.tableExists("foo") = false
//both session can access the logdata table
spark.sql("SELECT * FROM global_temp.logdata").show()
newSpark.sql("SELECT * FROM global_temp.logdata").show()
spark.stop()
}
}