欢迎投稿

今日深度:

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

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


目录
  • createTempView运作原理
  • 低效做法
  • 缓存临时表方式:
    • 方式1 创建
    • 方式2
    • 方式3
  • 临时表生命周期

    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内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

    您可能感兴趣的文章:
    • Spark GraphX 分布式图处理框架图算法详解
    • pyspark自定义UDAF函数调用报错问题解决
    • PySpark与GraphFrames的安装与使用环境搭建过程
    • SparkSQL快速入门教程
    • Pyspark 线性回归梯度下降交叉验证知识点详解
    • Spark中的数据读取保存和累加器实例详解

    www.htsjk.Com true http://www.htsjk.com/Sql_Server/45523.html NewsArticle Spark临时表tempView的注册/使用/注销/注意事项(推荐), 目录 createTempView运作原理 低效做法 缓存临时表方式: 方式1 创建 方式2 方式3 临时表生命周期 createTempView运作原理 先说一个众人皆...
    评论暂时关闭