web-dev-qa-db-fra.com

spark createOrReplaceTempView vs createGlobalTempView

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 ()?

19
Rahul Sharma
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()
18
Gökhan Ayhan

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:

  • pour un seul travail par lots
  • une session interactive avec plusieurs jobs
  • un serveur de longue durée satisfaisant continuellement les requêtes
  • Un travail Spark peut consister en plus d'une seule carte et réduire.
  • A Spark L'application peut comprendre plusieurs sessions

Une SparkSession d'autre part est associée à une Spark Application:

  • Généralement, une session est une interaction entre deux ou plusieurs entités.
  • dans Spark 2.0, vous pouvez utiliser SparkSession
  • Une SparkSession peut être créée sans créer SparkConf, SparkContext ou SQLContext (elles sont encapsulées dans la SparkSession)

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()
  }
}
26
Avi Chalbani