zoukankan      html  css  js  c++  java
  • spark-sql createOrReplaceTempView 和createGlobalTempView区别

    在讲解 createOrReplaceTempView 和createGlobalTempView的区别前,先了解下Spark Application 和  Spark Session区别 

    Spark Application 

    Spark Application 使用:

    • 针对单个批处理作业
    • 多个job通过session交互式
    • 不断满足请求的,长期存在的server
    • 一个Spark job 可以包含多个map和reduce
    • Spark Application 可以包含多个session实例

    Spark Session

    SparkSession与Spark应用程序相关联:

    • session 是两个或更多实体之间的交互媒介
    • 在Spark 2.0中,你可以使用SparkSession创建
    • 可以在不创建SparkConf,SparkContext或SQLContext的情况下创建SparkSession(它们封装在SparkSession中)

    createOrReplaceTempView使用

    createOrReplaceTempView:创建临时视图,此视图的生命周期与用于创建此数据集的[SparkSession]相关联。

    createGlobalTempView:创建全局临时视图,此时图的生命周期与Spark Application绑定。

    df.createOrReplaceTempView("tempViewName")
    df.createGlobalTempView("tempViewName")
    

    createOrReplaceTempView(): 创建或替换本地临时视图。

    此视图的生命周期依赖于SparkSession类,如果想drop此视图可采用dropTempView删除

    spark.catalog.dropTempView("tempViewName")

    或者 stop() 来停掉 session

    self.ss = SparkSession(sc)
    ...
    self.ss.stop()

    createGlobalTempView使用

    createGlobalTempView():创建全局临时视图。

    这种视图的生命周期取决于spark application本身。如果想drop此视图可采用dropGlobalTempView删除

    spark.catalog.dropGlobalTempView("tempViewName")

    或者stop() 将停止

    ss =  SparkContext(conf=conf, ......)
    ...
    ss.stop()

    注:Spark 2.1.0版本中引入了Global temporary views 。

    当您希望在不同sessions 之间共享数据并保持活动直到application结束时,此功能非常有用。

    为了说明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()
      }
    }
  • 相关阅读:
    6.5 列出当前目录所有文件
    6.4 协程写文件
    6.3 写文件
    6.2 创建空目录
    6.1 os 获取文件状态
    5.13 json
    es2016
    短路原理
    fexbox
    vue @
  • 原文地址:https://www.cnblogs.com/yyy-blog/p/spark-sql.html
Copyright © 2011-2022 走看看