- Shark 是 SparkSQL 的前身, SparkSQL 产生的根本原因是其完全脱离了 Hive 的限制
- 可以和Spark其他组件很好的集成,满足一站式大数据处理的需求
- SparkSQL 支持查询原生的 RDD ,是 Spark 能够高效的处理大数据的基础
- 能够在 scala / java 中写 SQL 语句。支持简单的 SQL 语法检查
- 能够在 SQL 中写 Hive 语句访问Hive 数据,并将结果取回作为 RDD 使用
- Hive只作为储存角色,Spark负责sql解析优化,执行
- Hive即作为存储又负责sql的解析优化,Spark负责执行
-
是什么
- 简单的把Dataframe理解成RDD+schema元信息
- DataSet的一种特例
-
特点
- Dataframe是一种以RDD为基础的分布式数据集,类似传统数据库的二维表格
- Dataframe带有schema元信息
- Dataframe可以从很多数据源构建对象
- Dataframe内部是一个个Row对象,它表示一行行数据
-
优点
- 提升执行效率
- 减少数据读取
- 执行优化
-
创建方式
- case class
- StructType
-
是什么
- DataSet是分布式的数据集合,DataSet提供了强类型支持,在RDD的每行数据加了类型约束
- 集中了RDD的优点(强类型和可以使用强大的lambda函数)以及使用了sparkSQL优化的执行引擎
- Dataset的元素为Row时,表现为Dataframe
-
show
- 表格的形式在输出中展示 jdbcDF 中的数据
- show 只显示前20条记录。
- show(numRows: Int) 显示 numRows 条
- show(truncate: Boolean) 是否最多只显示20个字符,默认为 true 。
- show(numRows: Int, truncate: Boolean) 综合前面的显示记录条数,以及对过长字符串的显示格式
-
collect
- 将 jdbcDF 中的所有数据都获取到,并返回一个 Array 对象
-
collectAsList
- 获取所有数据到List
-
describe(cols: String*)
- 获取指定字段的统计信息
-
first
- 获取第一行记录
-
head
- 获取第一行记录, head(n: Int) 获取前n行记录
-
take(n: Int)
- 获取前n行数据
-
takeAsList(n: Int)
- 获取前n行数据,并以 List 的形式展现
-
where(conditionExpr: String)
- 添加使用条件
- 可以用 and 和 or,得到Dataframe类型的返回结果
-
filter
- 根据字段进行筛选
-
select
- 获取指定字段值
-
selectExpr
- 可以对指定字段进行特殊处理
-
col
- 只能获取一个字段,返回对象为Column类型
-
apply
- 只能获取一个字段,返回对象为Column类型
-
drop
- 返回一个新的Dataframe对象,其中不包含去除的字段,一次只能去除一个字段
- 获取指定Dataframe的前n行记录,得到一个新的Dataframe对象
-
orderBy 和 sort
- 按指定字段排序,默认为升序
- 加个 - 表示降序排序
-
sortWithinPartitions
- sort 方法功能类似
- 该方法返回的是按Partition排好序的Dataframe对象
-
groupBy
- 根据字段进行 group by *** 作
-
cube 和 rollup
- group by的扩展
- 功能类似于 SQL 中的 group by cube/rollup
-
distinct
- 返回一个不包含重复记录的Dataframe
-
dropDuplicates
- 根据指定字段去重
- 类似于 select distinct a, b *** 作
- 调用的是 agg 方法,与 groupBy 方法配合使用
- 例:jdbcDF.agg(“id” -> “max”, “c4” -> “sum”)
-
unionAll
- 对两个Dataframe进行组合 ,类似于 SQL 中的 UNIOn ALL *** 作
-
笛卡尔积
-
使用 using
- joinDF1.join(joinDF2, “id”)
- 类似于 a join b using column1 的形式
-
也可用useing 多个字段
- 将data数据保存到指定的区域
首先拿到 sql 后解析一批未被解决的逻辑计划,再经过分析得到分析后的逻辑划,再经过一批优化规则转换成一批最佳优化的逻辑计划,再经过 SparkPlanner 的策略转化成一批物理计划,随后经过消费模型转换成一个个的 Spark 任务执行。
谓词下推(Predicate Pushdown)-
就是在不影响结果的情况下,尽量将过滤条件提前执行
-
好处:
- 过滤条件在map端执行,减少了map端的输出,降低了数据在集群上传输的量
- 节约了集群的资源,也提升了任务的性能
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)