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有更清晰的认识,在大数据处理的学习和实践中更上一层楼。
相关推荐
三水不滴7 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
ziqi52210 小时前
第二十四天笔记
笔记
马猴烧酒.10 小时前
【JAVA数据传输】Java 数据传输与转换详解笔记
java·数据库·笔记·tomcat·mybatis
ziqi52210 小时前
第二十五天笔记
前端·chrome·笔记
dalong1011 小时前
A11:plus 控件窗口绘图基础
笔记·aardio
历程里程碑11 小时前
Linxu14 进程一
linux·c语言·开发语言·数据结构·c++·笔记·算法
三水不滴12 小时前
Redis 持久化机制
数据库·经验分享·redis·笔记·缓存·性能优化
不断进步的咕咕怪12 小时前
meme分析
笔记
中屹指纹浏览器13 小时前
进程级沙箱隔离与WebGL指纹抗识别:指纹浏览器核心技术难点与工程落地
经验分享·笔记
sayang_shao13 小时前
Rust多线程编程学习笔记
笔记·学习·rust