webentwicklung-frage-antwort-db.com.de

spark createOrReplaceTempView vs createGlobalTempView

Spark Dataset 2.0 bietet zwei Funktionen: createOrReplaceTempView und createGlobalTempView. Ich kann den grundsätzlichen Unterschied zwischen beiden Funktionen nicht verstehen.

Gemäß API-Dokumente :

createOrReplaceTempView : Die Lebensdauer dieser temporären Ansicht ist an die [[SparkSession]] gebunden, mit der dieses Dataset erstellt wurde.
Wenn ich also sparkSession.close() aufrufe, wird das Definierte zerstört. ist es wahr?

createGlobalTempView : Die Lebensdauer dieser temporären Ansicht ist an diese Spark Anwendung gebunden.

wann wird diese Art von Sicht zerstört? irgendein Beispiel. wie sparkSession.close ()?

19
Rahul Sharma
df.createOrReplaceTempView("tempViewName")
df.createGlobalTempView("tempViewName")

createOrReplaceTempView() erstellt oder ersetzt eine lokale temporäre Ansicht durch diesen Datenrahmen df. Die Lebensdauer dieser Ansicht hängt von der Klasse SparkSession ab. Möchten Sie diese Ansicht löschen?

spark.catalog.dropTempView("tempViewName")

oder stop() beendet die Sitzung

self.ss = SparkSession(sc)
...
self.ss.stop()

createGlobalTempView() erstellt eine globale temporäre Ansicht mit diesem Datenrahmen df. Die Lebensdauer dieser Ansicht hängt von der spark application selbst ab. Wenn Sie löschen möchten:

spark.catalog.dropGlobalTempView("tempViewName")

oder stop() wird heruntergefahren

ss =  SparkContext(conf=conf, ......)
...
ss.stop()
18
Gökhan Ayhan

Die Antwort auf Ihre Fragen besteht im Grunde darin, den Unterschied zwischen einer Spark Application und einer Spark Session zu verstehen.

Die Spark-Anwendung kann verwendet werden:

  • für einen einzelnen Stapeljob
  • eine interaktive Sitzung mit mehreren Jobs
  • ein langlebiger Server, der ständig Anfragen befriedigt
  • Ein Spark Job kann aus mehr als nur einer Map bestehen und verkleinern.
  • Eine Spark Application kann aus mehr als einer Sitzung bestehen

Eine SparkSession hingegen ist einer Spark Anwendung zugeordnet:

  • Im Allgemeinen ist eine Sitzung eine Interaktion zwischen zwei oder mehr Entitäten.
  • in Spark 2.0 können Sie SparkSession verwenden
  • Eine SparkSession kann erstellt werden, ohne SparkConf, SparkContext oder SQLContext zu erstellen (diese sind in der SparkSession gekapselt).

Globale temporäre Ansichten werden in Spark 2.1.0 Release eingeführt. Diese Funktion ist nützlich, wenn Sie Daten für verschiedene Sitzungen freigeben und am Leben bleiben möchten, bis Ihre Anwendung endet veranschaulichen die Verwendung für createTempView und 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