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有更清晰的认识,在大数据处理的学习和实践中更上一层楼。
相关推荐
Purple Coder32 分钟前
论文阅读-9月27日(入门2)
笔记
Larry_Yanan1 小时前
QML学习笔记(十五)QML的信号处理器(MouseArea)
c++·笔记·qt·学习·ui
Larry_Yanan3 小时前
QML学习笔记(十七)QML的属性变更信号
javascript·c++·笔记·qt·学习·ui
Hello_Embed4 小时前
STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现
c语言·笔记·stm32·单片机·嵌入式软件·嵌入式项目
聪明的笨猪猪4 小时前
面试清单:JVM类加载与虚拟机执行核心问题
java·经验分享·笔记·面试
忘川w5 小时前
红宝书 基础词回忆
笔记
努力毕业的小土博^_^5 小时前
【深度学习|学习笔记】详细讲解一下 深度学习训练过程中 为什么 Momentum 可以加速训练?
人工智能·笔记·深度学习·学习·momentum
Larry_Yanan5 小时前
QML学习笔记(十四)QML的自定义模块
开发语言·笔记·qt·学习·ui
wdfk_prog5 小时前
[Linux]学习笔记系列 -- lib/sort.c 通用的排序库(Generic Sorting Library) 为内核提供标准的、高效的排序功能
linux·运维·c语言·笔记·stm32·学习·bug
柳鲲鹏8 小时前
《攒钱学概论》汇编
笔记