编辑推荐

适读人群:Spark初学者、Spark数据分析人员以及Spark程序开发人员

(1)讲解SparkSQL背景知识、编程基础
(2)通过一个工程实例让读者领略SparkSQL强大简便的分析能力
(3)学习构建一个大数据实际应用的方法,加强工程思维
(4)洞悉Spark的调优方式及其思想,让SparkSQL程序高效运行

内容简介

SparkSQL是Spark大数据框架的一部分,支持使用标准SQL查询和HiveQL来读写数据,可用于结构化数据处理,并可以执行类似SQL的Spark数据查询,有助于开发人员更快地创建和运行Spark程序。
Spark SQL入门与实践指南》分为4篇,共9章,第一篇讲解了SparkSQL发展历史和开发环境搭建。第二篇讲解了SparkSQL实例,使得读者掌握SparkSQL的入门操作,了解SparkRDD、DataFrame和DataSet,并熟悉DataFrame各种操作。第三篇讲解了基于WiFi探针的商业大数据分析项目,实例中包含数据采集、预处理、存储、利用SparkSQL挖掘数据,一步一步带领读者学习SparkSQL强大的数据挖掘功能。第四篇讲解了SparkSQL优化的知识。
Spark SQL入门与实践指南》适合Spark初学者、Spark数据分析人员以及Spark程序开发人员,也适合高校和培训学校相关专业的师生教学参考。

作者简介

纪涵,数据挖掘、云计算爱好者,曾负责多个中小型网站的开发维护工作,曾参与开发设计多款面向校园服务的App,参与开发设计过多个基于Hadoop、Spark平台的大数据应用,有着丰富的流数据、结构化数据处理经验,现主要研究方向为机器学习、数据挖掘。

目录

第一部分入门篇
第1章初识SparkSQL3
1.1SparkSQL的前世今生3
1.2SparkSQL能做什么4
第2章Spark安装、编程环境搭建以及打包提交6
2.1Spark的简易安装6
2.2准备编写Spark应用程序的IDEA环境10
2.3将编写好的Spark应用程序打包成jar提交到Spark上18
第二部分基础篇
第3章Spark上的RDD编程23
3.1RDD基础24
3.1.1创建RDD24
3.1.2RDD转化操作、行动操作24
3.1.3惰性求值25
3.1.4RDD缓存概述26
3.1.5RDD基本编程步骤26
3.2RDD简单实例—wordcount27
3.3创建RDD28
3.3.1程序内部数据作为数据源28
3.3.2外部数据源29
3.4RDD操作33
3.4.1转化操作34
3.4.2行动操作37
3.4.3惰性求值38
3.5向Spark传递函数39
3.5.1传入匿名函数39
3.5.2传入静态方法和传入方法的引用40
3.5.3闭包的理解41
3.5.4关于向Spark传递函数与闭包的总结42
3.6常见的转化操作和行动操作42
3.6.1基本RDD转化操作43
3.6.2基本RDD行动操作48
3.6.3键值对RDD52
3.6.4不同类型RDD之间的转换56
3.7深入理解RDD57
3.8RDD缓存、持久化59
3.8.1RDD缓存59
3.8.2RDD持久化61
3.8.3持久化存储等级选取策略63
3.9RDDcheckpoint容错机制64
第4章SparkSQL编程入门66
4.1SparkSQL概述66
4.1.1SparkSQL是什么66
4.1.2SparkSQL通过什么来实现66
4.1.3SparkSQL处理数据的优势67
4.1.4SparkSQL数据核心抽象——DataFrame67
4.2SparkSQL编程入门示例69
4.2.1程序主入口:SparkSession69
4.2.2创建DataFrame70
4.2.3DataFrame基本操作70
4.2.4执行SQL查询72
4.2.5全局临时表73
4.2.6Dataset73
4.2.7将RDDs转化为DataFrame75
4.2.8用户自定义函数78
第5章SparkSQL的DataFrame操作大全82
5.1由JSON文件生成所需的DataFrame对象82
5.2DataFrame上的行动操作84
5.3DataFrame上的转化操作91
5.3.1where条件相关92
5.3.2查询指定列94
5.3.3思维开拓:Column的巧妙应用99
5.3.4limit操作102
5.3.5排序操作:orderby和sort103
5.3.6groupby操作106
5.3.7distinct、dropDuplicates去重操作107
5.3.8聚合操作109
5.3.9union合并操作110
5.3.10join操作111
5.3.11获取指定字段统计信息114
5.3.12获取两个DataFrame中共有的记录116
5.3.13获取一个DataFrame中有另一个DataFrame中没有的记录116
5.3.14操作字段名117
5.3.15处理空值列118
第6章SparkSQL支持的多种数据源121
6.1概述121
6.1.1通用load/save函数121
6.1.2手动指定选项123
6.1.3在文件上直接进行SQL查询123
6.1.4存储模式123
6.1.5持久化到表124
6.1.6bucket、排序、分区操作124
6.2典型结构化数据源125
6.2.1Parquet文件125
6.2.2JSON数据集129
6.2.3Hive表130
6.2.4其他数据库中的数据表133
第三部分实践篇
第7章SparkSQL工程实战之基于WiFi探针的商业大数据分析技术139
7.1功能需求139
7.1.1数据收集139
7.1.2数据清洗140
7.1.3客流数据分析141
7.1.4数据导出142
7.2系统架构142
7.3功能设计143
7.4数据库结构144
7.5本章小结144

前言/序言

  前言
  我们处于一个数据爆炸的时代!
  大量涌现的智能手机、平板、可穿戴设备及物联网设备每时每刻都在产生新的数据,然而带来革命性变革的并非海量数据本身,而是我们如何从这些数据中挖掘到有价值的信息,来辅助我们做出更加智能的决策。我们知道,在生产环境下,所谓的大数据往往是由数千万条、上亿条具有多个预定义字段的数据单元组成的数据集,是不是很像传统关系型数据库的二维数据表呢?那么我们是否也能找到一个像SQL查询那样简便的工具来高效地分析处理大数据领域中的海量结构化数据呢?没错,这个工具就是SparkSQL。
  SparkSQL是Spark用来操作结构化数据的高级模块,在程序中通过引入SparkSQL模块,我们便可以像从前在关系型数据库利用SQL(结构化查询语言)分析关系型数据库表一样简单快捷地在Spark大数据分析平台上对海量结构化数据进行快速分析,而Spark平台屏蔽了底层分布式存储、计算、通信的细节以及作业解析、调度的细节,使我们开发者仅需关注如何利用SQL进行数据分析的程序逻辑就可以方便地操控集群来分析我们的数据。
  《Spark SQL入门与实践指南》内容
  《Spark SQL入门与实践指南》共分为四篇:入门篇、基础篇、实践篇、调优篇,所有代码均采用简洁而优雅的Scala语言编写,Spark框架也是使用Scala语言编写的。
  第一部分入门篇(第1、2章)
  第1章简要介绍Spark的诞生、SparkSQL的发展历史以及SparkSQL的用处等内容,使读者快速了解SparkSQL背景知识,为以后的学习奠定基础。
  第2章通过讲解SparkSQL开发环境的搭建、Spark作业的打包提交、常见问题的解答,并结合大量图示,使读者快速掌握开发环境的搭建以及提交应用程序到集群上,为后面章节的学习奠定坚实的基础。
  第二部分基础篇(第3、4、5、6章)
  第3章是真正开始学习SparkSQL必要的先修课,其中详尽地介绍了Spark框架对数据的核心抽象——RDD(弹性分布式数据集)的方方面面。先介绍与RDD相关的基本概念,例如转化操作、行动操作、惰性求值、缓存,讲解的过程伴随着丰富的示例,旨在提高读者对RDD的理解与加强读者的RDD编程基础。在讲明白RDD中基础内容的同时,又深入地剖析了疑点、难点,例如RDDLineage(RDD依赖关系图)、向Spark传递函数、对闭包的理解等。在之前对基本类型RDD的学习基础上,又引入了对特殊类RDD——键值对RDD的大致介绍,在键值对RDD介绍中对combineByKey操作的讲解,深入地从代码实现的角度洞悉了Spark分布式计算的实质,旨在帮助对RDD有着浓厚兴趣的读者做进一步的拓展。最后,站在RDD设计者的角度重新审视了RDD缓存、持久化、checkpoint机制,从而诠释了RDD为什么能够很好地适应大数据分析业务的特点,有天然强大的容错性、易恢复性和高效性。
  第4章对Spark高级模块——SparkSQL,也就是《Spark SQL入门与实践指南》的主题,进行了简明扼要的概述,并讲述了相应的SparkSQL编程基础。先是通过与前一章所学的Spark对数据的核心抽象——RDD的对比,引出了SparkSQL中核心的数据抽象——DataFrame,讲解了两者的异同,点明了SparkSQL是针对结构化数据处理的高级模块的原因在于其内置丰富结构信息的数据抽象。后一部分通过丰富的示例讲解了如何利用SparkSQL模块来编程的主要步骤,例如,从结构化数据源中创建DataFrames、DataFrames基本操作以及执行SQL查询等。
  第5、6章属于SparkSQL编程的进阶内容,也是我们将SparkSQL应用于生产、科研计算环境下,真正开始分析多类数据源、实现各种复杂业务需求必须要掌握的知识。在第5章里,我们以包含简单且典型的学生信息表的JSON文件作为数据源,深入对DataFrame丰富强大的API进行研究,以操作讲解加示例的形式包揽了DataFrame中每一个常用的行动、转化操作,进而帮助读者轻松高效地组合使用DataFrame所提供的API来实现业务需求。在第6章里,介绍了SparkSQL可处理的各种数据源,包括Hive表、JSON和Parquet文件等,从广度上使读者了解SparkSQL在大数据领域对典型结构化数据源的皆可处理性,从而使读者真正在工作中掌握一门结构化数据的分析利器。
  第三部分实践篇(第7、8章)
  第7章通过讲解大型商业实例项目(基于WiFi探针的商业大数据分析技术)的功能需求、系统架构、功能设计、数据库结构来帮助读者理解如何在实际开发中应用SparkSQL来处理结构化数据,加强读者的工程思维,同时为第8章的学习做好铺垫。
  第8章通过讲解分布式环境搭建以及项目代码的解析来帮助读者进一步理解SparkSQL应用程序的执行过程,在后一部分介绍了SparkSQL程序的远程调试方法和Spark的Web界面,帮助读者更加方便地了解程序的运行状态。
  第四部分调优篇(第9章)
  调优篇由第9章组成,本篇从Spark的执行流程到内存以及任务的划分,再到Spark应用程序的编写技巧,接着到Spark本身的调优,最后引出数据倾斜的解决思路,层层递进,逐步解析Spark的调优思想。最后以对Spark执行引擎Tungsten与SparkSQL的解析引擎Catalyst的介绍作为本部分的结尾。笔者将在本篇中带领读者掌握Spark的调优方式以及思想,让Spark程序再快一点。
  《Spark SQL入门与实践指南》适合读者
  《Spark SQL入门与实践指南》适合于学习数据挖掘、有海量结构化数据分析需求的大数据从业者及爱好者阅读,也可以作为高等院校相关专业的教材。建议在学习《Spark SQL入门与实践指南》内容的过程中,理论联系实际,独立进行一些代码的编写,采取开放式的实验方法,即读者自行准备实验数据和实验环境,解决实际问题,最终达到理论联系实际的目的。
  《Spark SQL入门与实践指南》在写作过程中得到了家人以及《Spark SQL入门与实践指南》编辑的大力支持,在此对他们一并表示感谢。
  《Spark SQL入门与实践指南》由纪涵(主要负责基础篇的编写)主笔,其他参与著作的还有靖晓文(主要负责实践篇的编写)、赵政达(主要负责入门篇、调优篇的编写),排名不分先后。
  纪涵
  2018年2月

其他推荐