在讲解 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()
}
}

最新文章

  1. python 新手遇到的问题
  2. Ubuntu14.04安装pip及配置
  3. NAnt打包使用MSTest进行单元测试的配置
  4. iOS开发之网络数据解析(二)--XML解析简介
  5. Mac下安装JDK 6
  6. c 计算 语句 执行 时间
  7. 浅尝JavaScript document对象
  8. DP入门
  9. GWAS群体分层 (Population stratification):利用plink对基因型进行PCA
  10. Microsoft SQL - 指令
  11. 【ML入门系列】(二)分类与回归
  12. ACM题集以及各种总结大全(转)
  13. 《Python黑帽子:黑客与渗透测试编程之道》 Windows系统提权
  14. C语言入门:04.数据类型、常量、变量
  15. MediatR 中介模式
  16. 15.04.14-登录之后刷新AntiForgeryToken
  17. windows使用技巧和工具(后面可能更新linux)
  18. 洛谷P4171 [JSOI2010] 满汉全席 [2-SAT,Tarjan]
  19. SQL操作语句之查询及删除重复记录的方法
  20. MySQL 1067

热门文章

  1. jmeter登录之-动态参数
  2. 树莓派 omv 安装 nextcloud
  3. Spark:三种任务提交流程standalone、yarn-cluster、yarn-client
  4. Java split的用法
  5. 使用Swagger2Markup归档swagger生成的API文档
  6. Unity3D中动态创建编辑轴(点,线,圆,圆锥)
  7. Red5流媒体服务器开发
  8. xxd - 以十六进制形式表示
  9. Java Selenium起步
  10. zmq中的router和dealer