首页 > 资讯列表 > 编程/数据库 >> 数据库操作教程

Spark临时表tempView的注册/使用/注销/注意事项(推荐)

数据库操作教程 2022-11-07 15:04:20 转载来源: 网络整理/侵权必删

目录createTempView运作原理低效做法缓存临时表方式:方式1创建方式2方式3临时表生命周期createTempView运作原理先说一个众人皆知的知识:Spark中的算子包含transformation算子和action算子,transformation是根据原有RDD创建一个新的RDD,而action则把RDD操作后的结果返回给driver。Spark对transformation的抽象可以大大提高性能,这是因为在Spark中,所有transformation操作都是lazy模式,即Spark不会立即计算结果,而只是简单地记住所有对数据集的转换操作逻辑

createTempView运作原理

先说一个众人皆知的知识:
Spark中的算子包含transformation算子和action算子,transformation是根据原有RDD创建一个新的RDD,而action则把RDD操作后的结果返回给driver。Spark对transformation的抽象可以大大提高性能,这是因为在Spark中,所有transformation操作都是lazy模式,即Spark不会立即计算结果,而只是简单地记住所有对数据集的转换操作逻辑。这些转换只有遇到action操作的时候才会开始计算。这样的设计使得Spark更加高效。

低效做法

sql("select a,b from table where xxx").createTempView("view1")sql("select a from view1 where xxx").show()sql("select b from view1 where xxx").show()

使用createTempView后,查询这个视图每次都很耗时了,正是因为createTempView操作是lazy模式,在没有action算子触发之前,它并没有什么实质性的运作,仅仅记录了一个创建视图的逻辑
Spark每次遇到action算子show()方法的时候,才开始真正计算,上面代码中两次用到视图view1,那么意味着创建视图的方法会执行两次,因此非常的耗时,所以需要对view1进行缓存处理

缓存临时表方式:

方式1 创建

// 创建它的SparkSession对象终止前有效df.createOrReplaceTempView("tempViewName")  // spark应用程序终止前有效df.createOrReplaceGlobalTempView("tempViewName") 

注销

spark.catalog.dropTempView("tempViewName")spark.catalog.dropGlobalTempView("tempViewName")

方式2

创建

session.table("tempViewName").cache()

注销

session.table("tempViewName").unpersist()

方式3

创建

commonDF.cahe() 或 commonDF.persist(StorageLevel.MEMORY_AND_DISK)commonDF.createOrReplaceTempView("tempViewName")

注销

commonDF.unpersist()

临时表生命周期

源码

createOrReplaceTempView

  /**   * 使用给定名称创建本地临时视图。此临时视图的生命周期与用于创建此数据集的 SparkSession 相关联。   *   * @group basic   * @since 2.0.0   */  def createOrReplaceTempView(viewName: String): Unit = withPlan {    createTempViewCommand(viewName, replace = true, global = false)  }

也就是说,当一下代码中spark stop(),之后 创建的临时视图表才失效

createGlobalTempView

/**   * 使用给定名称创建一个全局临时视图。此临时视图的生命周期与此 Spark 应用程序相关联。全局临时视图是跨会话的。它的生命周期是 Spark 应用程序的生命周期,即当应用程序终止时它会被自动删除。它与系统保留的数据库 global_temp 相关联,我们必须使用限定名称来引用全局临时视图,例如从 global_temp.view1 中选择。   *   * @throws AnalysisException if the view name is invalid or already exists   *   * @group basic   * @since 2.1.0   */  @throws[AnalysisException]  def createGlobalTempView(viewName: String): Unit = withPlan {    createTempViewCommand(viewName, replace = false, global = true)  }

到此这篇关于Spark临时表tempView的注册/使用/注销/注意事项的文章就介绍到这了,更多相关Spark临时表tempView内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

标签: Spark 临时 tempView 注册 使用 注销 注意事项 推荐


声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!

站长搜索

http://www.adminso.com

Copyright @ 2007~2024 All Rights Reserved.

Powered By 站长搜索

打开手机扫描上面的二维码打开手机版


使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

站长搜索目录系统技术支持