Spark Dataset 2.0 propose deux fonctions createOrReplaceTempView
et createGlobalTempView
. Je ne peux pas comprendre la différence fondamentale entre les deux fonctions.
Selon documents API :
createOrReplaceTempView : la durée de vie de cette vue temporaire est liée à la [[SparkSession]] qui a été utilisée pour créer cet ensemble de données.
Donc, quand j'appelle sparkSession.close()
le défini sera détruit. est-ce vrai?
createGlobalTempView : La durée de vie de cette vue temporaire est liée à cette application Spark.
quand ce type de vue sera détruit? tout exemple. comme sparkSession.close ()?
df.createOrReplaceTempView("tempViewName")
df.createGlobalTempView("tempViewName")
createOrReplaceTempView()
crée ou remplace une vue temporaire locale par ce df de trame de données. La durée de vie de cette vue dépend de la classe SparkSession
, si vous souhaitez supprimer cette vue:
spark.catalog.dropTempView("tempViewName")
ou stop()
arrêtera la session
self.ss = SparkSession(sc)
...
self.ss.stop()
createGlobalTempView()
crée une vue temporaire globale avec ce dataframe df. la durée de vie de cette vue dépend de spark application elle-même. Si vous souhaitez supprimer:
spark.catalog.dropGlobalTempView("tempViewName")
ou stop()
arrêtera
ss = SparkContext(conf=conf, ......)
...
ss.stop()
La réponse à vos questions consiste essentiellement à comprendre la différence entre une application Spark et une session Spark.
L'application Spark peut être utilisée:
Une SparkSession d'autre part est associée à une Spark Application:
Les vues temporaires globales sont introduites dans la version Spark 2.1.0. Cette fonctionnalité est utile lorsque vous souhaitez partager des données entre différentes sessions et rester en vie jusqu'à la fin de votre application. illustrer l'utilisation de createTempView
et 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()
}
}