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 小时前
多业态连锁,如何同步铺开各类门店
大数据·人工智能·笔记·工程·公装·连锁店
乐橙开放平台2 小时前
明厨亮灶笔记:乐橙轻应用 H5 + 小程序插件,一套 BFF 出两张播放凭证
人工智能·笔记·物联网·小程序·音视频·notepad++
左左右右左右摇晃3 小时前
手写Tomcat原理整理
java·开发语言·笔记·tomcat
.Hypocritical.4 小时前
Maven笔记——2
java·笔记·maven
乐橙开放平台4 小时前
养殖 SaaS 笔记:乐橙 IoT 物模型管环境,视频 OpenAPI 管回看
数据库·笔记·物联网·mysql·音视频
love530love13 小时前
【笔记】AutoClaw NSIS 安装器卡死、进程杀不掉、目录删不了?我是这么解决的
人工智能·windows·笔记·agent
谙弆悕博士15 小时前
系统集成项目管理工程师教程(第3版)笔记——第2章:信息技术发展
笔记·计算机网络·信息安全·学习方法·业界资讯·软考·系统分析师
吃着火锅x唱着歌16 小时前
Effective C++ 学习笔记 条款37 绝不重新定义继承而来的缺省参数值
c++·笔记·学习
风曦Kisaki16 小时前
# Linux笔记:操作系统优化与资源管理
linux·运维·服务器·笔记
阿米亚波17 小时前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记