Rah*_*rma 20 apache-spark apache-spark-dataset
Spark Dataset 2.0提供了两个功能createOrReplaceTempView和 createGlobalTempView.我无法理解两种功能之间的基本区别.
根据API文件:
createOrReplaceTempView:此临时视图的生命周期与用于创建此数据集的[[SparkSession]]相关联.
所以,当我调用时sparkSession.close(),定义将被销毁.这是真的吗?
createGlobalTempView:此临时视图的生命周期与此Spark应用程序绑定.
何时会破坏这种类型的视图?任何例子.喜欢sparkSession.close()?
小智 30
您的问题的答案基本上是了解Spark应用程序和Spark会话的区别.
可以使用Spark应用程序:
另一方面,SparkSession与Spark应用程序相关联:
Spark 2.1.0版本中引入了全局临时视图.当您想要在不同会话之间共享数据并保持活着直到您的应用程序结束时,此功能非常有用.请参阅我编写的一个镜头示例,以说明用于createTempView和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()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 20
df.createOrReplaceTempView("tempViewName")
df.createGlobalTempView("tempViewName")
Run Code Online (Sandbox Code Playgroud)
createOrReplaceTempView()使用此数据框df创建或替换本地临时视图.此视图的生命周期依赖于SparkSession类,是否要删除此视图:
spark.catalog.dropTempView("tempViewName")
Run Code Online (Sandbox Code Playgroud)
或stop()将关闭会话
self.ss = SparkSession(sc)
...
self.ss.stop()
Run Code Online (Sandbox Code Playgroud)
createGlobalTempView()使用此数据框df创建全局临时视图.这种观点的生命周期取决于火花应用本身.如果你想放弃:
spark.catalog.dropGlobalTempView("tempViewName")
Run Code Online (Sandbox Code Playgroud)
或stop()将关闭
ss = SparkContext(conf=conf, ......)
...
ss.stop()
Run Code Online (Sandbox Code Playgroud)