欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Spark-SQL简介

Spark-SQL简介

2025/4/18 18:48:48 来源:https://blog.csdn.net/2301_82217925/article/details/147229375  浏览:    关键词: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 均可使用模式匹配获取各个字段的值和类型

三者的区别

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

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词