Spark SQL

一文读懂Spark SQL:从基础到核心编程

  • 在大数据处理领域,Spark框架备受青睐,而Spark SQL更是其中处理结构化数据的得力助手。今天,就来带大家深入了解Spark SQL。
  • Spark SQL的前身是Shark,它最初是为了帮助熟悉关系型数据库但不了解MapReduce的技术人员快速上手而开发的。后来,由于Shark对Hive的依赖制约了Spark的发展,Spark SQL应运而生。它不仅兼容Hive,还能从多种数据源获取数据,如RDD、parquet文件、JSON文件等,未来甚至能支持从RDBMS和NOSQL数据库获取数据。同时,在性能优化和组件扩展方面也有出色表现。
  • Spark SQL有几个显著特点,它能无缝整合SQL查询和Spark编程;可以用相同方式连接不同数据源;能在已有的Hive仓库上直接运行SQL或HQL;还支持通过JDBC或ODBC进行标准数据连接。
  • DataFrame和DataSet是Spark SQL提供的两个重要编程抽象。DataFrame类似传统数据库中的二维表格,以RDD为基础,但它带有schema元信息,这使得Spark SQL能进行针对性优化,提高运行效率。而且DataFrame API提供的关系操作更友好,门槛更低。DataSet则是具有强类型的数据集合,它结合了RDD的强类型和Spark SQL优化执行引擎的优点,使用样例类来定义数据结构信息。
  • 下面讲讲它们的实际操作。创建DataFrame有多种方式,比如从Spark数据源读取数据,像读取json文件:
  • val df = spark.read.json("data/user.json")
  • 也可以从已有的RDD转换而来。查询DataFrame数据时,既可以使用SQL语法,先创建临时视图或全局视图,再用SQL语句查询;也能使用DSL语法,这种方式无需创建临时视图,更加便捷。
  • DataSet的创建也很简单,可以使用样例类序列,如:
  • case class Person(name: String, age: Long)
  • val caseClassDS = Seq(Person("zhangsan",2)).toDS()
  • 也能用基本类型的序列创建。实际使用中,更多是通过RDD来得到DataSet。
  • RDD、DataFrame和DataSet之间可以相互转换。在Spark的不同版本中,它们先后出现:Spark1.0引入RDD,Spark1.3出现DataFrame,Spark1.6有了DataSet。它们都是分布式弹性数据集,具有惰性机制,有许多共同函数,会自动缓存运算,也都有分区概念。但它们也有区别,RDD一般和spark mllib同时使用,不支持sparksql操作;DataFrame每一行类型固定为Row,需解析获取字段值;DataSet类型更灵活,能自由获取每一行信息。
  • 希望通过这篇博客,大家能对Spark SQL有更清晰的认识,在大数据处理的学习和实践中更上一层楼。
相关推荐
泽虞1 天前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
FakeOccupational1 天前
电路笔记(信号):网线能传多少米?网线信号传输距离
开发语言·笔记·php
Yawesh_best1 天前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
Ccjf酷儿2 天前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y2 天前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面2 天前
(笔记)自定义 systemd 服务
笔记
DKPT2 天前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉2 天前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途2 天前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
QT 小鲜肉2 天前
【孙子兵法之上篇】001. 孙子兵法·计篇深度解析与现代应用
笔记·读书·孙子兵法