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.