Saltar al contenido

chispa createOrReplaceTempView vs createGlobalTempView

Solución:

La respuesta a sus preguntas es básicamente comprender la diferencia entre una aplicación Spark y una sesión Spark.

La aplicación Spark se puede utilizar:

  • para un solo trabajo por lotes
  • una sesión interactiva con múltiples trabajos
  • un servidor de larga duración que satisface continuamente las solicitudes
  • Un trabajo de Spark puede consistir en más de un solo mapa y reducir.
  • Una aplicación Spark puede constar de más de una sesión

Por otro lado, una SparkSession está asociada a una aplicación Spark:

  • Generalmente, una sesión es una interacción entre dos o más entidades.
  • en Spark 2.0 puedes usar SparkSession
  • Se puede crear una SparkSession sin crear SparkConf, SparkContext o SQLContext, (están encapsulados dentro de SparkSession)

Las vistas temporales globales se introducen en la versión Spark 2.1.0. Esta función es útil cuando desea compartir datos entre diferentes sesiones y mantenerse activo hasta que finalice su aplicación. Vea una muestra de disparo que escribí para ilustrar el uso de createTempView y 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()
  }
}

df.createOrReplaceTempView("tempViewName")
df.createGlobalTempView("tempViewName")

createOrReplaceTempView() crea o reemplaza una vista temporal local con este marco de datos df. La vida útil de esta vista depende de SparkSession class, quieres eliminar esta vista:

spark.catalog.dropTempView("tempViewName")

o stop() cerrará la sesión

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

createGlobalTempView() crea una vista temporal global con este marco de datos df. El tiempo de vida de esta vista depende de la activación de la aplicación. Si quieres dejar:

spark.catalog.dropGlobalTempView("tempViewName")

o stop() se apagará

ss =  SparkContext(conf=conf, ......)
...
ss.stop()

createOrReplaceTempView se introdujo en Spark 2.0 para reemplazar registerTempTable. CreateTempView crea una referencia en memoria al marco de datos en uso. La duración de esto depende de la sesión de chispa en la que se creó el marco de datos. CreateGlobalTempView, por otro lado, le permite crear las referencias que se pueden usar en las sesiones de chispa. Entonces, dependiendo de si necesita compartir datos entre sesiones, puede usar cualquiera de los métodos. De forma predeterminada, los cuadernos del mismo clúster comparten la misma sesión de chispa, pero hay una opción para configurar clústeres en los que cada portátil tiene su propia sesión. Entonces, todo se reduce a dónde crea el marco de datos y dónde desea acceder a él.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *