SparkSession - Spark SQL 的 入口
SparkSession - Spark SQL 的 入口
翻译自:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-SparkSession.html
概述
SparkSession 是 Spark SQL 的入口。使用 Dataset 或者 Datafram 编写 Spark SQL 应用的时候,第一个要创建的对象就是 SparkSession。
Note:在 Spark 2.0 中, SparkSession 合并了 SQLContext 和 HiveContext。
你可以通过 SparkSession.builder 来创建一个 SparkSession 的实例,并通过 stop 函数来停止 SparkSession。
import org.apache.spark.sql.SparkSession
val spark: SparkSession = SparkSession.builder
.appName("My Spark Application") // optional and will be autogenerated if not specified
.master("local[*]") // avoid hardcoding the deployment environment
.enableHiveSupport() // self-explanatory, isn't it?
.config("spark.sql.warehouse.dir", "target/spark-warehouse")
.getOrCreate
你可以在一个 Spark 应用中使用多个 SparkSession, 这样子就可以通过 SparSession 将多个关系实体隔离开来(可以参考 catalog 属性)。
scala> spark.catalog.listTables.show
+------------------+--------+-----------+---------+-----------+
| name|database|description|tableType|isTemporary|
+------------------+--------+-----------+---------+-----------+
|my_permanent_table| default| null| MANAGED| false|
| strs| null| null|TEMPORARY| true|
+------------------+--------+-----------+---------+-----------+
在 SparkSession 的内部, 包含了SparkContext, SharedState,SessionState 几个对象。下表中介绍了每个对象的大体功能:
| Name | Type | Description |
|---|---|---|
| sparkContext | SparkContext | spark功能的主要入口点。可以通过 sparkConext在集群上创建RDD, accumulators 和 broadcast variables |
| existingSharedState | Option[SharedState] | 一个内部类负责保存不同session的共享状态 |
| parentSessionState | Option[SessionState] | 复制父session的状态 |
下图是 SparkSession 的类和方法, 这些方法包含了创建 DataSet, DataFrame, Streaming 等等。
| Method | Description |
|---|---|
| builder | "Opens" a builder to get or create a SparkSession instance |
| version | Returns the current version of Spark. |
| implicits | Use import spark.implicits._ to import the implicits conversions and create Datasets from (almost arbitrary) Scala objects. |
| emptyDataset[T] | Creates an empty Dataset[T]. |
| range | Creates a Dataset[Long]. |
| sql | Executes a SQL query (and returns a DataFrame). |
| udf | Access to user-defined functions (UDFs). |
| table | Creates a DataFrame from a table. |
| catalog | Access to the catalog of the entities of structured queries |
| read | Access to DataFrameReader to read a DataFrame from external files and storage systems. |
| conf | Access to the current runtime configuration. |
| readStream | Access to DataStreamReader to read streaming datasets. |
| streams | Access to StreamingQueryManager to manage structured streaming queries. |
| newSession | Creates a new SparkSession. |
| stop | Stops the SparkSession. |
Builder
Builder 是 SparkSession 的构造器。 通过 Builder, 可以添加各种配置。
Builder 的方法如下:
| Method | Description |
|---|---|
| getOrCreate | 获取或者新建一个 sparkSession |
| enableHiveSupport | 增加支持 hive Support |
| appName | 设置 application 的名字 |
| config | 设置各种配置 |
import org.apache.spark.sql.SparkSession
val spark: SparkSession = SparkSession.builder
.appName("My Spark Application") // optional and will be autogenerated if not specified
.master("local[*]") // avoid hardcoding the deployment environment
.enableHiveSupport() // self-explanatory, isn't it?
.getOrCreate
ShareState
ShareState 是 SparkSession 的一个内部类,负责保存多个有效session之间的共享状态。下表介绍了ShareState的属性。
| Name | Type | Description |
|---|---|---|
| cacheManager | CacheManager | 这个是 SQLContext 的支持类,会自动保存 query 的查询结果。这样子查询在执行过程中,就可以使用这些查询结果 |
| externalCatalog | ExternalCatalog | 保存外部系统的 catalog |
| globalTempViewManager | GlobalTempViewManager | 一个线程安全的类,用来管理 global temp view, 并提供 create , update , remove 的等原子操作,来管理这些 view |
| jarClassLoader | NonClosableMutableURLClassLoader | 加载用户添加的 jar 包 |
| listener | SQLListener | 一个监听类 |
| sparkContext | SparkContext | Spark 的核心入口类 |
| warehousePath | String | MetaStore 的地址,可以通过 spark.sql.warehouse.dir 或者 hive-site.xml 中的 hive.metastore.warehouse.dir 来指定, Spark 会覆盖 hive 的参数 |
ShareState 会使用一个 sparkContext 作为构造参数。如果可以在 CLASSPATH 中找到 hive-site.xml,ShareState 会将它加入到 sparkContext 的 hadoop configuration 中。
通过设置 log4j.logger.org.apache.spark.sql.internal.SharedState=INFO 可以看到相应的日志。
SparkSession - Spark SQL 的 入口的更多相关文章
- Spark SQL catalyst概述和SQL Parser的具体实现
之前已经对spark core做了较为深入的解读,在如今SQL大行其道的背景下,spark中的SQL不仅在离线batch处理中使用广泛,structured streamming的实现也严重依赖spa ...
- 理解Spark SQL(二)—— SQLContext和HiveContext
使用Spark SQL,除了使用之前介绍的方法,实际上还可以使用SQLContext或者HiveContext通过编程的方式实现.前者支持SQL语法解析器(SQL-92语法),后者支持SQL语法解析器 ...
- Spark SQL | 目前Spark社区最活跃的组件之一
Spark SQL是一个用来处理结构化数据的Spark组件,前身是shark,但是shark过多的依赖于hive如采用hive的语法解析器.查询优化器等,制约了Spark各个组件之间的相互集成,因此S ...
- spark SQL (一)初识 ,简介
一, 简介 Spark SQL是用于结构化数据处理的Spark模块.与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了关于数据结构和正在执行的计算的更多信息.在内部 ...
- Spark SQL内置函数
Spark SQL内置函数官网API:http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.fun ...
- Spark SQL 编程
Spark SQL的依赖 Spark SQL的入口:SQLContext 官方网站参考 https://spark.apache.org/docs/1.6.2/sql-programming-guid ...
- [Spark SQL] SparkSession、DataFrame 和 DataSet 练习
本課主題 DataSet 实战 DataSet 实战 SparkSession 是 SparkSQL 的入口,然后可以基于 sparkSession 来获取或者是读取源数据来生存 DataFrameR ...
- Spark SQL 编程API入门系列之SparkSQL的入口
不多说,直接上干货! SparkSQL的入口:SQLContext SQLContext是SparkSQL的入口 val sc: SparkContext val sqlContext = new o ...
- 初识Spark2.0之Spark SQL
内存计算平台spark在今年6月份的时候正式发布了spark2.0,相比上一版本的spark1.6版本,在内存优化,数据组织,流计算等方面都做出了较大的改变,同时更加注重基于DataFrame数据组织 ...
随机推荐
- ASP.NET Core-组件-后台任务:Hangfire
ylbtech-ASP.NET Core-组件-后台任务:Hangfire Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的 ...
- 什么是BOM头(字节顺序标记(ByteOrderMark))
在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑ut ...
- tabBar的图标不被系统渲染
navi.tabBarItem.selectedImage = [[UIImage imageNamed:imageStr]imageWithRenderingMode:UIImageRenderin ...
- Redis学习笔记(二) Redis 数据类型
Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...
- POJ 3411 DFS
大致题意: 有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少 ...
- 用VS2015创建ASP.NET Web Forms 应用程序
在 Visual Studio 2015 中,按着以下步骤创建一个 Web Forms 应用程序项目: 1.起始页/文件--->新建项目--->已安装--->模板--->Vis ...
- 一个基于React整套技术栈+Node.js的前端页面制作工具
pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...
- app专项测试
本节为大家讲述app的专项测试——客户端性能测试.这个我也做了蛮久的了.在这里修改了一下本篇随笔. 首先我们了解一下什么是客户端的性能测试.性能测试相比大家都已经耳熟能详了,这个app的客户端性能测试 ...
- luogu p1004
P1004 题意 类似一个比较小的方格(N<=9),有的点是0,有的点有数, A->B的路径经过的点加上该点代表的数,求两次A->B的最大解(最优解) 一个令人恼的问题是两条路径如果 ...
- Day01-04学习内容总结
学习内容小结 1.什么是编程,编程有什么用,什么是编程语言 2.计算的组成原理及组成部分 3.机械硬盘的工作原理 4.什么是操作系统,操作系统做了什么,为什么要有操作系统,操作系统有什么用 5.应用程 ...