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 小时前
【机器学习】机器学习笔记
人工智能·笔记·机器学习
天下琴川8 小时前
Dify智能体平台源码二次开发笔记(5) - 多租户的SAAS版实现(2)
人工智能·笔记
workworkwork勤劳又勇敢9 小时前
Adversarial Attack对抗攻击--李宏毅机器学习笔记
人工智能·笔记·深度学习·机器学习
寻丶幽风11 小时前
论文阅读笔记——Generating Long Sequences with Sparse Transformers
论文阅读·笔记·语言模型·transformer·稀疏自注意力
Angindem11 小时前
websoket 学习笔记
笔记·学习
jackson凌16 小时前
【Java学习笔记】Java第一课,梦开始的地方!!!
java·笔记
I like Code?16 小时前
AntVG2可视化学习与开发笔记-React19(持续更新)
javascript·笔记·学习
那天的烟花雨17 小时前
android display 笔记(十一)surfaceflinger 如何将图层传到lcd驱动的呢?
android·笔记
你说你说你来说17 小时前
安卓开发Intent详细介绍和使用
android·笔记