Spark——Spark缓存临时视图(View)

文章目录

  • RDD/Dataset缓存复用
  • 纯SQL结果缓存复用

RDD/Dataset缓存复用

我们知道在使用RDD和Dataset API开发Spark应用程序的时候,如果要缓存某个RDD或Dataset来进行复用,减少重复计算提升计算效率的时候,我们可以在RDD或Dataset上调用persist()方法并传入缓存级别参数进行缓存。

val df: Dataset[Row] = ...
df.persist(StorageLevel.MEMORY_AND_DISK)

纯SQL结果缓存复用

但是当我们以纯SQL来开发Spark应用程序的时候,该如何缓存某段SQL产生的结果呢?

  1. 第一步,对要复用的SQL创建临时视图。这里需要注意两点
    • 临时视图生命周期:所创建的临时视图的生命周期是绑定在当前Spark应用程序上的,也就是说,当前Spark应用程序的任何地方都可以访问这个临时视图,应用程序停止之后,临时视图会自动被删除。
    • 临时视图所在的数据库:创建临时视图时,系统会默认分配一个数据库名称“global_temp”,在使用临时视图时,必须加上这个库名,否则找不到
  2. 第二步,对临时视图进行缓存,同样可以指定缓存级别
  3. 第三步,使用缓存的临时视图
val spark: SparkSession = ...

//1. 创建临时视图
spark.sql("select name, age from db.table").createOrReplaceGlobalTempView("temp_view")

//2. 缓存临时视图
spark.catalog.cacheTable("global_temp.temp_view", StorageLevel.MEMORY_AND_DISK)

//3. 使用缓存的临时视图
spark.sql("select name from global_temp.temp_view")
spark.sql("select age from global_temp.temp_view")

你可能感兴趣的:(Spark,Spark)