大数据快速计算引擎Spark之SparkSQL

大数据快速计算引擎Spark之SparkSQL,第1张

数据快速计算引擎Spark之SparkSQL SparkSQL 简介 由来
  • Shark 是 SparkSQL 的前身, SparkSQL 产生的根本原因是其完全脱离了 Hive 的限制
  • 可以和Spark其他组件很好的集成,满足一站式大数据处理的需求
优点
  • SparkSQL 支持查询原生的 RDD ,是 Spark 能够高效的处理大数据的基础
  • 能够在 scala / java 中写 SQL 语句。支持简单的 SQL 语法检查
  • 能够在 SQL 中写 Hive 语句访问Hive 数据,并将结果取回作为 RDD 使用
Spark on Hive
  • Hive只作为储存角色,Spark负责sql解析优化,执行
Hive on Spark
  • Hive即作为存储又负责sql的解析优化,Spark负责执行
DataSet和Dataframe Dataframe
  • 是什么

    • 简单的把Dataframe理解成RDD+schema元信息
    • DataSet的一种特例
  • 特点

    • Dataframe是一种以RDD为基础的分布式数据集,类似传统数据库的二维表格
    • Dataframe带有schema元信息
    • Dataframe可以从很多数据源构建对象
    • Dataframe内部是一个个Row对象,它表示一行行数据
  • 优点

    • 提升执行效率
    • 减少数据读取
    • 执行优化
  • 创建方式

    • case class
    • StructType
DataSet
  • 是什么

    • DataSet是分布式的数据集合,DataSet提供了强类型支持,在RDD的每行数据加了类型约束
    • 集中了RDD的优点(强类型和可以使用强大的lambda函数)以及使用了sparkSQL优化的执行引擎
    • Dataset的元素为Row时,表现为Dataframe
DSL数据 *** 作 action
  • 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对象,其中不包含去除的字段,一次只能去除一个字段
Limit
  • 获取指定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”)
union
  • unionAll

    • 对两个Dataframe进行组合 ,类似于 SQL 中的 UNIOn ALL *** 作
join
  • 笛卡尔积

  • 使用 using

    • joinDF1.join(joinDF2, “id”)
    • 类似于 a join b using column1 的形式
  • 也可用useing 多个字段

save
  • 将data数据保存到指定的区域
数据源 SparkSQL底层架构

首先拿到 sql 后解析一批未被解决的逻辑计划,再经过分析得到分析后的逻辑划,再经过一批优化规则转换成一批最佳优化的逻辑计划,再经过 SparkPlanner 的策略转化成一批物理计划,随后经过消费模型转换成一个个的 Spark 任务执行。

谓词下推(Predicate Pushdown)
  • 就是在不影响结果的情况下,尽量将过滤条件提前执行

  • 好处:

    • 过滤条件在map端执行,减少了map端的输出,降低了数据在集群上传输的量
    • 节约了集群的资源,也提升了任务的性能

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5677756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存