Spark Session创建临时视图和全局临时视图的区别

根据Spark的官方文档解释:
临时视图createOrReplaceTempView()的作用域为当前创建的会话,一旦此会话终止,则此临时视图消失,不能与其他的SparkSession共享。
全局临时视图createGlobalTempView()的作用域为一个Spark应用程序,此视图在所有会话之间共享并保持活动状态,直到Spark应用程序终止。
用Windows版本的Spark本地模式运行代码:
//1.首先需要创建一个基本的SparkSession作为Spark中所有功能的入口点
import org.apache.spark.sql.SparkSession
import spark.implicits._
val spark = SparkSession
.builder()
.appName(“Spark SQL basic example”)
.config(“spark.some.config.option”, “some-value”)
.getOrCreate()
//2.读取文件创建DataFrame
val df = spark.read.json("…/examples/src/main/resources/people.json")
//3.创建临时视图
df.createOrReplaceTempView(“people”)
//SparkSession上的SQL函数使应用程序能以编程方式运行SQL查询,并将结果作为DataFrame返回
val sqlDF = spark.sql(“SELECT * FROM people”)
//将从官方案例中查询到的数据结果进行展示
sqlDF.show()
// ±—±------+
// | age| name|
// ±—±------+
// |null|Michael|
// | 30| Andy|
// | 19| Justin|
// ±—±------+
//4.创建全局临时视图
df.createGlobalTempView(“people2”)
//全局临时视图与系统保留的数据库相关联global_temp,因此必须使用限定形成来引用,例:SELECT * FROM global_temp.视图名
spark.sql(“SELECT * FROM global_temp.people2”).show()
// ±—±------+
// | age| name|
// ±—±------+
// |null|Michael|
// | 30| Andy|
// | 19| Justin|
// ±—±------+
//5.重新创建一个临时视图来验证其作用域为当前会话
spark.newSession().sql(“SELECT * FROM global_temp.people”).show()
//运行报错为表格或视图未找到,2020-02-06 22:58:43 WARN ObjectStore:568 - Failed to get database global_temp, returning NoSuchObjectException
org.apache.spark.sql.AnalysisException: Table or view not found: global_temp.people; line 1 pos 14;
//6.重新创建一个全局临时视图来验证其作用域为一个Spark应用程序
spark.newSession().sql(“SELECT * FROM global_temp.people2”).show()
// ±—±------+
// | age| name|
// ±—±------+
// |null|Michael|
// | 30| Andy|
// | 19| Justin|
// ±—±------+
//7视图的删除
//临时视图
spark.catalog.dropTempView(“视图名”)
//全局临时视图
spark.catalog.dropGlobalTempView(“视图名”)
//或者用stop()终止session
spark.stop()

你可能感兴趣的:(Spark Session创建临时视图和全局临时视图的区别)