产品特色
编辑推荐
适读人群 :Spark初学者、Spark数据分析人员以及Spark程序开发人员 (1)讲解Spark SQL背景知识、编程基础
(2)通过一个工程实例让读者领略Spark SQL强大简便的分析能力
(3)学习构建一个大数据实际应用的方法,加强工程思维
(4)洞悉Spark的调优方式及其思想,让Spark SQL程序高效运行
内容简介
Spark SQL是 Spark大数据框架的一部分,支持使用标准SQL查询和HiveQL来读写数据,可用于结构化数据处理,并可以执行类似SQL的Spark数据查询,有助于开发人员更快地创建和运行Spark程序。
全书分为4篇,共9章,第一篇讲解了Spark SQL 发展历史和开发环境搭建。第二篇讲解了Spark SQL 实例,使得读者掌握Spark SQL的入门操作,了解Spark RDD、DataFrame和DataSet,并熟悉 DataFrame 各种操作。第三篇讲解了基于WiFi探针的商业大数据分析项目,实例中包含数据采集、预处理、存储、利用Spark SQL 挖掘数据,一步一步带领读者学习Spark SQL强大的数据挖掘功能。第四篇讲解了Spark SQL 优化的知识。
本书适合Spark初学者、Spark数据分析人员以及Spark程序开发人员,也适合高校和培训学校相关专业的师生教学参考。
作者简介
纪 涵,数据挖掘、云计算爱好者,曾负责多个中小型网站的开发维护工作,曾参与开发设计多款面向校园服务的App,参与开发设计过多个基于Hadoop、Spark平台的大数据应用,有着丰富的流数据、结构化数据处理经验,现主要研究方向为机器学习、数据挖掘。
目录
第一部分 入门篇
第1章 初识Spark SQL 3
1.1 Spark SQL的前世今生 3
1.2 Spark SQL能做什么 4
第2章 Spark安装、编程环境搭建以及打包提交 6
2.1 Spark的简易安装 6
2.2 准备编写Spark应用程序的IDEA环境 10
2.3 将编写好的Spark应用程序打包成jar提交到Spark上 18
第二部分 基础篇
第3章 Spark上的RDD编程 23
3.1 RDD基础 24
3.1.1 创建RDD 24
3.1.2 RDD转化操作、行动操作 24
3.1.3 惰性求值 25
3.1.4 RDD缓存概述 26
3.1.5 RDD基本编程步骤 26
3.2 RDD简单实例—wordcount 27
3.3 创建RDD 28
3.3.1 程序内部数据作为数据源 28
3.3.2 外部数据源 29
3.4 RDD操作 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 键值对RDD 52
3.6.4 不同类型RDD之间的转换 56
3.7 深入理解RDD 57
3.8 RDD 缓存、持久化 59
3.8.1 RDD缓存 59
3.8.2 RDD持久化 61
3.8.3 持久化存储等级选取策略 63
3.9 RDD checkpoint容错机制 64
第4章 Spark SQL编程入门 66
4.1 Spark SQL概述 66
4.1.1 Spark SQL是什么 66
4.1.2 Spark SQL通过什么来实现 66
4.1.3 Spark SQL 处理数据的优势 67
4.1.4 Spark SQL数据核心抽象——DataFrame 67
4.2 Spark SQL编程入门示例 69
4.2.1 程序主入口:SparkSession 69
4.2.2 创建 DataFrame 70
4.2.3 DataFrame基本操作 70
4.2.4 执行SQL查询 72
4.2.5 全局临时表 73
4.2.6 Dataset 73
4.2.7 将RDDs转化为DataFrame 75
4.2.8 用户自定义函数 78
第5章 Spark SQL的DataFrame操作大全 82
5.1 由JSON文件生成所需的DataFrame对象 82
5.2 DataFrame上的行动操作 84
5.3 DataFrame上的转化操作 91
5.3.1 where条件相关 92
5.3.2 查询指定列 94
5.3.3 思维开拓:Column的巧妙应用 99
5.3.4 limit操作 102
5.3.5 排序操作:order by和sort 103
5.3.6 group by操作 106
5.3.7 distinct、dropDuplicates去重操作 107
5.3.8 聚合操作 109
5.3.9 union合并操作 110
5.3.10 join操作 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章 Spark SQL支持的多种数据源 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.6 bucket、排序、分区操作 124
6.2 典型结构化数据源 125
6.2.1 Parquet 文件 125
6.2.2 JSON 数据集 129
6.2.3 Hive表 130
6.2.4 其他数据库中的数据表 133
第三部分 实践篇
第7章 Spark SQL 工程实战之基于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查询那样简便的工具来高效地分析处理大数据领域中的海量结构化数据呢?没错,这个工具就是Spark SQL。
Spark SQL是Spark 用来操作结构化数据的高级模块,在程序中通过引入Spark SQL模块,我们便可以像从前在关系型数据库利用SQL(结构化查询语言)分析关系型数据库表一样简单快捷地在Spark大数据分析平台上对海量结构化数据进行快速分析,而 Spark 平台屏蔽了底层分布式存储、计算、通信的细节以及作业解析、调度的细节,使我们开发者仅需关注如何利用SQL 进行数据分析的程序逻辑就可以方便地操控集群来分析我们的数据。
本书内容
本书共分为四篇:入门篇、基础篇、实践篇、调优篇,所有代码均采用简洁而优雅的Scala语言编写,Spark框架也是使用Scala语言编写的。
第一部分 入门篇(第1、2章)
第1章简要介绍Spark的诞生、Spark SQL的发展历史以及Spark SQL的用处等内容,使读者快速了解Spark SQL背景知识,为以后的学习奠定基础。
第2章通过讲解Spark SQL开发环境的搭建、Spark作业的打包提交、常见问题的解答,并结合大量图示,使读者快速掌握开发环境的搭建以及提交应用程序到集群上,为后面章节的学习奠定坚实的基础。
第二部分 基础篇(第3、4、5、6章)
第3章是真正开始学习Spark SQL必要的先修课,其中详尽地介绍了Spark框架对数据的核心抽象——RDD(弹性分布式数据集)的方方面面。先介绍与RDD相关的基本概念,例如转化操作、行动操作、惰性求值、缓存,讲解的过程伴随着丰富的示例,旨在提高读者对RDD的理解与加强读者的RDD编程基础。在讲明白RDD中基础内容的同时,又深入地剖析了疑点、难点,例如RDD Lineage(RDD依赖关系图)、向Spark传递函数、对闭包的理解等。在之前对基本类型RDD的学习基础上,又引入了对特殊类RDD——键值对RDD的大致介绍,在键值对RDD介绍中对combineByKey操作的讲解,深入地从代码实现的角度洞悉了Spark分布式计算的实质,旨在帮助对RDD有着浓厚兴趣的读者做进一步的拓展。最后,站在RDD设计者的角度重新审视了RDD缓存、持久化、checkpoint机制,从而诠释了RDD为什么能够很好地适应大数据分析业务的特点,有天然强大的容错性、易恢复性和高效性。
第4章对Spark高级模块——Spark SQL,也就是本书的主题,进行了简明扼要的概述,并讲述了相应的Spark SQL编程基础。先是通过与前一章所学的Spark对数据的核心抽象——RDD的对比,引出了Spark SQL中核心的数据抽象——DataFrame,讲解了两者的异同,点明了Spark SQL是针对结构化数据处理的高级模块的原因在于其内置丰富结构信息的数据抽象。后一部分通过丰富的示例讲解了如何利用Spark SQL模块来编程的主要步骤,例如,从结构化数据源中创建DataFrames、DataFrames基本操作以及执行SQL查询等。
第5、6章属于 Spark SQL编程的进阶内容,也是我们将Spark SQL应用于生产、科研计算环境下,真正开始分析多类数据源、实现各种复杂业务需求必须要掌握的知识。在第5章里,我们以包含简单且典型的学生信息表的JSON文件作为数据源,深入对DataFrame丰富强大的API进行研究,以操作讲解加示例的形式包揽了DataFrame中每一个常用的行动、转化操作,进而帮助读者轻松高效地组合使用DataFrame所提供的API来实现业务需求。在第6章里,介绍了Spark SQL 可处理的各种数据源,包括Hive表、JSON和Parquet文件等,从广度上使读者了解Spark SQL在大数据领域对典型结构化数据源的皆可处理性,从而使读者真正在工作中掌握一门结构化数据的分析利器。
第三部分 实践篇(第7、8章)
第7章通过讲解大型商业实例项目(基于WiFi探针的商业大数据分析技术)的功能需求、系统架构、功能设计、数据库结构来帮助读者理解如何在实际开发中应用Spark SQL来处理结构化数据,加强读者的工程思维,同时为第8章的学习做好铺垫。
第8章通过讲解分布式环境搭建以及项目代码的解析来帮助读者进一步理解Spark SQL应用程序的执行过程,在后一部分介绍了Spark SQL程序的远程调试方法和Spark 的Web 界面,帮助读者更加方便地了解程序的运行状态。
第四部分 调优篇(第9章)
调优篇由第9章组成,本篇从Spark的执行流程到内存以及任务的划分,再到Spark应用程序的编写技巧,接着到Spark本身的调优,最后引出数据倾斜的解决思路,层层递进,逐步解析Spark的调优思想。最后以对Spark 执行引擎 Tungsten与Spark SQL的解析引擎Catalyst的介绍作为本部分的结尾。笔者将在本篇中带领读者掌握Spark的调优方式以及思想,让Spark程序再快一点。
本书适合读者
本书适合于学习数据挖掘、有海量结构化数据分析需求的大数据从业者及爱好者阅读,也可以作为高等院校相关专业的教材。建议在学习本书内容的过程中,理论联系实际,独立进行一些代码的编写,采取开放式的实验方法,即读者自行准备实验数据和实验环境,解决实际问题,最终达到理论联系实际的目的。
本书在写作过程中得到了家人以及本书编辑的大力支持,在此对他们一并表示感谢。
本书由纪涵(主要负责基础篇的编写)主笔,其他参与著作的还有靖晓文(主要负责实践篇的编写)、赵政达(主要负责入门篇、调优篇的编写),排名不分先后。
纪 涵
2018年2月
《数据洞察的利器:Spark SQL进阶之路》 在这信息爆炸的时代,数据已成为驱动商业决策、科技创新以及社会进步的核心要素。从海量用户行为日志到复杂的科学实验数据,再到物联网设备产生的实时流,我们正以前所未有的速度积累和产生数据。如何从这些庞杂的数据中挖掘出有价值的信息,实现快速、高效的数据分析,成为摆在我们面前的重大课题。而Spark SQL,正是这个时代赋予我们的强大武器。 本书并非一本简单的技术手册,它是一次深入探索Spark SQL潜力的旅程。我们将跳出“入门”的浅尝辄止,直抵“实践”的精髓,聚焦于如何将Spark SQL的力量淋漓尽致地发挥出来,以应对真实世界中复杂多变的数据分析挑战。我们不满足于知其然,更追求知其所以然,深入理解Spark SQL背后的原理,才能在面对疑难杂症时游刃有余,在优化性能时事半功倍。 面向对象:谁能从本书中获益? 本书的目标读者群体广泛,主要涵盖以下几类: 有一定Spark基础的数据工程师和开发人员: 如果您已经熟悉Spark Core API,并且希望将工作流程转向更声明式、更高效的SQL查询,本书将是您无缝过渡的理想选择。我们将帮助您理解Spark SQL与RDD之间的关系,掌握DataFrame和Dataset的优势,以及如何利用SQL语法和API进行复杂的数据转换和分析。 有SQL背景但初涉大数据领域的数据分析师和科学家: 如果您擅长使用传统SQL进行数据分析,但对大数据处理的复杂性感到困惑,本书将为您搭建一座桥梁。您将学习如何用熟悉的SQL语言操作TB甚至PB级别的数据,理解Spark SQL在分布式环境下的执行机制,并掌握利用SQL进行大规模数据探索和建模的技巧。 对大数据处理和分布式计算感兴趣的技术爱好者: 无论您的背景如何,只要您对如何处理海量数据、构建高性能数据管道、以及利用现代化技术进行数据驱动决策感兴趣,本书都将为您提供宝贵的知识和实践指导。 核心内容:深度解析与实战演练 本书的结构围绕着Spark SQL的核心概念、高级特性和实际应用展开,力求为读者提供一个全面而深入的学习体验。 第一部分:Spark SQL基石重塑 在深入探讨高级主题之前,我们首先将重新审视Spark SQL的基础,但视角会更加深入和全面。 DataFrame/Dataset的本质与优势: 我们将详细剖析DataFrame和Dataset的内部结构,理解它们如何通过Schema来优化数据存储和查询计划。我们将深入讲解Catalyst Optimizer的工作原理,揭示Spark SQL如何将SQL查询转化为高效的执行计划,以及其背后的逻辑和优化策略。 Schema的演进与灵活运用: 掌握Schema的定义、推断和演变对于构建健壮的数据应用至关重要。我们将演示如何处理半结构化数据,如JSON、Parquet等,以及如何动态地适应数据结构的变更。 SQL语法与API的融合: 除了标准的SQL查询,我们还将重点介绍Spark SQL提供的丰富API,包括DSL(Domain Specific Language),让您能够以编程的方式构建复杂的数据转换。理解SQL语法和API之间的互操作性,将极大地提升您的开发效率。 第二部分:性能优化与高级特性 理解了基础,我们便能着手于让Spark SQL运行得更快、更稳健。 查询优化深度剖析: Catalyst Optimizer是Spark SQL的大脑,我们将揭示其内部的工作流程,包括解析、逻辑优化和物理优化。您将学习如何阅读和理解Spark UI中的查询计划,识别性能瓶颈,并掌握如谓词下推(Predicate Pushdown)、列裁剪(Column Pruning)等核心优化技术。 数据存储格式与分区策略: 不同的数据存储格式(如Parquet、ORC)在性能上有着显著差异。本书将深入比较它们的优劣,并指导您如何选择最适合您业务场景的格式。同时,我们将详细讲解数据分区(Partitioning)和分桶(Bucketing)的重要性,以及如何通过合理的分区策略大幅提升查询效率。 缓存与持久化策略: 合理利用Spark的缓存机制(`cache()`和`persist()`)可以显著减少重复计算。我们将探讨不同缓存级别的影响,并指导您如何在数据访问模式下做出最佳选择。 窗口函数与复杂分析: 窗口函数是进行高级数据分析的利器,用于处理 sıralama、聚合等场景。本书将提供丰富的窗口函数应用实例,帮助您解决复杂的分析问题,例如计算移动平均、排名、滞后值等。 用户自定义函数(UDF)的性能考量: 虽然UDF提供了灵活性,但滥用或不当使用可能导致性能下降。我们将深入分析UDF在Spark SQL中的执行方式,讨论其性能开销,并指导您如何编写高效的UDF,甚至考虑使用Spark SQL内置函数或Pandas UDF等替代方案。 第三部分:Spark SQL在真实场景中的应用 理论的最终目的是指导实践。本部分将聚焦于Spark SQL在不同真实场景下的应用,通过具体的案例,让读者掌握解决实际问题的能力。 ETL(Extract, Transform, Load)流程构建: Spark SQL是构建高效ETL管道的理想工具。我们将展示如何利用Spark SQL从各种数据源(数据库、文件系统、消息队列)抽取数据,进行复杂的转换(清洗、聚合、关联),并将结果加载到目标系统中。 实时数据流处理: 结合Spark Streaming或Structured Streaming,Spark SQL能够无缝处理实时数据流。我们将演示如何对流式数据进行SQL查询,实现近乎实时的分析和响应。 交互式数据探索与可视化: Spark SQL强大的即席查询能力,使其成为交互式数据探索的绝佳选择。我们将探讨如何将其与各类可视化工具(如Tableau, Power BI, Zeppelin, Jupyter Notebook)集成,让数据分析师能够快速发现数据中的洞察。 机器学习特征工程: 在构建机器学习模型之前,特征工程是至关重要的一步。Spark SQL提供了丰富的函数和API,可以高效地完成特征的提取、转换和创建,本书将提供相关实践案例。 与其他大数据组件的协同: Spark SQL并非孤立存在,它能与Hadoop生态系统中的其他组件(如HDFS, Hive, Kafka, Cassandra)良好协作。我们将探讨如何将Spark SQL集成到现有的Hadoop架构中,发挥其最大价值。 本书特色:理论与实践的完美结合 深入浅出的讲解: 我们力求用清晰易懂的语言解释复杂的技术概念,避免冗余的理论堆砌,聚焦于核心要点。 丰富的实战案例: 本书包含大量贴近实际业务场景的代码示例和案例分析,让读者在学习过程中就能动手实践,巩固知识。 性能优化技巧: 我们将贯穿全书的性能优化策略,从查询计划到存储格式,全方位指导读者构建高性能的数据处理应用。 前沿技术的探讨: 除了核心的Spark SQL,我们还将适时引入与Spark SQL相关的最新技术和发展趋势,帮助读者保持技术领先。 解决实际问题的能力: 本书的目标是赋予读者解决真实世界数据挑战的能力,而不仅仅是学习API。 结语 在数据驱动的未来,掌握Spark SQL的强大能力,意味着您掌握了从海量数据中提炼价值、驱动创新的核心竞争力。本书将是您在这条道路上不可或缺的伙伴,陪伴您从理解Spark SQL的强大功能,到精通其性能优化技巧,最终能够自信地将其应用于各种复杂的数据分析场景。让我们一起踏上这段进阶之旅,解锁数据洞察的无限可能。