当前位置: 首页 > news >正文

Spark-SQL简介

 

Spark-SQL: Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。

Hive and SparkSQL: Drill,Impala.Shark

Shark 是伯克利实验室 Spark 生态环境的组件之一. Shark 的出现,使得 SQL-on-Hadoop 的性能比 Hive 有了 10-100 倍的提高。

Spark-SQL 特点

易整合。无缝的整合了 SQL 查询和 Spark 编程

统一的数据访问。使用相同的方式连接不同的数据源

兼容 Hive。在已有的仓库上直接运行 SQL 或者 HQL

标准数据连接。通过 JDBC 或者 ODBC 来连接

DataFrame 是什么: 优化的执行计划,即查询计 划通过 Spark catalyst optimiser 进行优化。

DataSet 是什么

DataSet 是 DataFrame API 的一个扩展,是 SparkSQL 最新的数据抽象

用户友好的 API 风格,既具有类型安全检查也具有 DataFrame 的查询优化特性;

用样例类来对 DataSet 中定义数据的结构信息,样例类中每个属性的名称直接映射到 DataSet 中的字段名称;

DataSet 是强类型的。比如可以有 DataSet[Car],DataSet[Person]。

DataFrame 是 DataSet 的特列,DataFrame=DataSet[Row] ,所以可以通过 as 方法将 DataFrame 转换为 DataSet。Row 是一个类型,跟 Car、Person 这些的类型一样,所有的表结构信息都用 Row 来表示。获取数据时需要指定顺序

 

DataFrame

DataFrame API 既有 transformation 操作也有 action 操作。

Spark-SQL核心编程(一)

创建 DataFrame

Spark 数据源进行创建

Spark-SQL支持的数据类型:

在 spark 的 bin/data 目录中创建 user.json 文件

展示数据:

SQL 语法

读取 JSON 文件创建 DataFrame

对 DataFrame 创建一个临时表

通过 SQL 语句实现查询全表

结果展示

通过 SQL 语句实现查询全表

Spark-SQL核心编程(二)

DSL 语法

创建一个 DataFrame

查看 DataFrame 的 Schema 信息

只查看"username"列数据

查看"username"列数据以及"age+1"数据

查看"age"大于"17"的数据

按照"age"分组,查看数据条数

RDD 转换为 DataFrame

DataFrame 转换为 RDD

DataFrame 其实就是对 RDD 的封装,所以可以直接获取内部的 RDD

Spark-SQL核心编程(三)

创建 DataSet

使用样例类序列创建 DataSet

在实际使用的时候,很少用到把序列转换成DataSet,更多的是通过RDD来得到DataSet

使用基本类型的序列创建 DataSet

RDD 转换为 DataSet

DataSet 转换为 RDD

DataFrame 和 DataSet 转换

DataSet 转换为 DataFrame

RDD、DataFrame、DataSet 三者的关系

Spark1.0 => RDD

Spark1.3 => DataFrame

Spark1.6 => Dataset

三者的共性

RDD、DataFrame、DataSet 全都是 spark 平台下的分布式弹性数据集,为处理超大型数据提供便利;

三者都有惰性机制,在进行创建、转换,如 map 方法时,不会立即执行,只有在遇到Action 如 foreach 时,三者才会开始遍历运算;

三者有许多共同的函数,如 filter,排序等;

在对 DataFrame 和 Dataset 进行操作许多操作都需要这个包:import spark.implicits._(在创建好 SparkSession 对象后尽量直接导入)

三者都会根据 Spark 的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出

三者都有分区(partition)的概念

DataFrame 和 DataSet 均可使用模式匹配获取各个字段的值和类型

三者的区别

三者可以通过上图的方式进行相互转换

 

相关文章:

  • virtualbox扩容
  • C++数据结构优化实战指南:从理论到工程的最佳实践
  • 146.WEB渗透测试-MySQL基础(一)
  • 长度最小的子数组
  • WebFlux应用中获取x-www-form-urlencoded数据的六种方法
  • 代码训练day27贪心算法p1
  • Linux Kernel 4
  • spring-boot nacos
  • deepin使用autokey添加微信快捷键一键显隐ctrl+alt+w
  • CExercise_12_单链表面试题_1求链表中间结点的值,判断单链表是否有环
  • 代码随想录训练营第31天 || 56. 合并区间 738. 单调递增的数字
  • gitee基本使用
  • Shell编程之循环语句
  • 【前端样式】使用Flexbox实现经典导航栏:自适应间距与移动端折叠实战
  • MATLAB基本数据类型
  • 如何一键自动提取CAD图中的中心线(如墙体、道路、巷道中心线等)
  • Android常见界面控件、程序活动单元Activity练习
  • LeetCode算法题(Go语言实现)_46
  • 3.2.2.3 Spring Boot配置拦截器
  • C++学习之数据库操作
  • 人民日报:应对外贸行业风险挑战,稳企业就是稳就业
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 持续更新丨伊朗内政部长:港口爆炸已致14人死亡
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布首度进军黄金矿产
  • 欢迎回家!日本和歌山县4只大熊猫将于6月底送返中国
  • 政治局会议:要提高中低收入群体收入,设立服务消费与养老再贷款