Spark快速大数据分析(第2版)
上QQ阅读APP看书,第一时间看更新

前言

欢迎阅读《Spark 快速大数据分析(第 2 版)》!第 1 版英文版于 2015 年出版,原作者为 Holden Karau、Andy Konwinski、Patrick Wendell 和 Matei Zaharia。新版加入了 Apache Spark 从 2.x 版本到 3.0 版本的演进情况,其中包括内建数据源和外部数据源构成的生态系统、机器学习,以及与 Spark 紧密结合的流处理技术。

多年来,最早从 1.x 版本开始,Spark 就已经成为一站式大数据处理引擎的事实标准。一路走来,Spark 已经扩展到足以支持各种类型的分析作业。我们的目的是为你展示这一演进过程,不仅仅介绍如何使用 Spark,更重要的是如何适应这个属于大数据与机器学习的新时代。因此,我们精心设计了各个章节,每一章都在前一章的基础上逐渐深入,确保内容的难易程度适合目标读者。

目标读者

跟大数据打交道的人大致分为数据工程师、数据科学家和机器学习工程师。本书的目标读者正是这类人中寻求使用 Spark 扩展其应用,以处理海量数据的专业人士。

具体来说,数据工程师将学习如何使用 Spark 的结构化数据 API,对批式数据或流式数据进行复杂的探索和分析;使用 Spark SQL 进行交互式查询;使用 Spark 的内建数据源和外部数据源来读取、改进和写出各种文件格式的数据,实现对这些数据的抽取、转换、加载;使用 Spark 和开源的 Delta Lake 表格式构建出可靠的数据湖。

对于数据科学家和机器学习工程师来说,Spark 的 MLlib 库为构建分布式机器学习模型提供了很多常用算法。我们将介绍如何使用 MLlib 库构建流水线,分布式机器学习的最佳实践,如何使用 Spark 扩展单机模型,以及如何使用开源库 MLflow 管理和部署这些模型。

本书的重心是将 Spark 作为一种适用于各种类型作业的分析引擎进行学习,但不会介绍 Spark 支持的所有语言。书中的大多数示例是用 Scala、Python 和 SQL 编写的。必要时,我们也会写一点点 Java 代码。对于有兴趣用 R 语言学习 Spark 的朋友,我们推荐阅读由 Javier Luraschi、Kevin Kuo 和 Edgar Ruiz 撰写的 Mastering Spark with R

由于 Spark 是一个分布式引擎,因此理解 Spark 应用的一些概念是非常重要的。我们会展示 Spark 应用如何与 Spark 的分布式组件进行交互,以及执行过程如何分解为集群上的并发任务。我们还会介绍各种环境所支持的部署模式。

尽管我们已经选择了很多主题进行介绍,但也有一些内容未被纳入本书范畴。这些排除在本书之外的内容包括较老的底层弹性分布式数据集 API、Spark 中用于图与图计算的 API(GraphX)。我们也不会介绍一些较为高阶的内容,比如如何扩展 Spark 的 Catalyst 优化器来实现自定义的操作,如何实现自己的表目录,或者如何自己编写基于 DataSource V2 接口的数据输入源与输出池。虽然这些内容也是 Spark 的一部分,但是它们超出了学习 Spark 的第一本书所应当涉及的内容范畴。

本书的重点将放在 Spark 的结构化数据 API 上,并围绕这一重点组织内容,从 Spark 的各组件出发,告诉你如何使用 Spark 处理大规模结构化数据,从而完成数据工程任务或数据科学任务。

本书结构

本书各章循序渐进,首先介绍概念,然后通过示例代码片段演示概念的含义。随书代码包 1 提供了完整的代码示例或代码笔记本,以供你亲手体验。

1要下载随书代码包,请访问本书在图灵社区的专属页面。——编者注

第 1 章概述大数据演进过程,并从宏观角度介绍 Apache Spark 及其在大数据领域的应用。

第 2 章手把手地教你如何下载、安装和设置 Spark。

第 3 章~第 6 章重点介绍 DataFrame 和 Dataset 这两种结构化数据 API 的使用,包括从内建数据源和外部数据源接入数据、调用内建函数和自定义函数,以及利用 Spark SQL 进行操作。这些章节为后续章节打下了基础,而且会在适当时穿插介绍 Spark 3.0 的最新变化。

第 7 章提供通过 Spark UI 对 Spark 应用进行调优、优化、调试、检查的最佳实践,并详细介绍那些可以用来提高应用性能的配置项。

第 8 章将带你领略 Spark 流计算引擎的演进历程,以及最新的结构化流处理编程模型。这一章将深入剖析典型的流式查询,探讨转化流式数据的不同方式,其中包括有状态聚合、流式连接和任意的有状态计算,还为如何设计出高性能的流式查询语句提供指导。

第 9 章探讨 Spark 生态系统的三种开源表格式存储解决方案,它们都可以使用 Spark 构建带有事务保证的可靠数据湖。因为 Delta Lake 在批式作业与流式作业上都与 Spark 紧密结合,所以我们重点介绍这种解决方案,并探索它如何为数据管理建立一种新的范式——湖仓一体。

第 10 章介绍 Spark 的分布式机器学习库 MLlib,并带你体验一个端到端构建机器学习流水线的例子,其中涉及特征工程、超参数调优、评估指标、保存和加载模型等主题。

第 11 章介绍如何使用 MLflow 跟踪和管理 MLlib 模型,比较和分析不同的模型部署选项,并探索如何利用 Spark 实现非 MLlib 模型的分布式模型推断、特征工程,以及超参数调优。

第 12 章是全书的最后一章,重点突出 Spark 3.0 的一些重要特性和变动。我们无法在短短一章中囊括所有的优化项和特性,因此只能选取一些应该了解的主要变动来重点介绍。建议你查阅相应的发布说明。

在这些章节中,我们会在必要时穿插讲解或提到 Spark 3.0 的特性。所有的代码示例和代码笔记本都是基于 Spark 3.0.0-preview2 版本编写和测试的。

代码示例说明

本书中的代码示例既有简短的代码片段,也有完整的 Spark 应用,还有端到端的代码笔记本,涉及的编程语言包括 Scala、Python、SQL,甚至 Java。

虽然书中有一些简短的代码片段是独立的,可以复制粘贴到 Spark shell(pysparkspark-shell)中直接运行,但也有一些代码片段是从用 Scala、Python 或 Java 编写的独立 Spark 应用或端到端代码笔记本节选出的一段。如果要运行用 Scala、Python 或 Java 编写的独立 Spark 应用,可以阅读随书代码包中相关章节的介绍文档。

若要运行代码笔记本,则需要注册一个免费的 Databricks 社区版账号。我们在代码仓库的介绍文档中详细介绍了如何用 Spark 3.0 导入代码笔记本和创建集群。

使用的软件和配置

本书和附带的代码笔记本中的代码是基于 Spark 3.0.0-preview2 版本编写和测试的,这是我们撰写完最后一章时已发布的版本。

目前,Apache Spark 3.0 正式版已经发布,可供整个社区使用。我们推荐下载和使用正式版本,并在操作系统中使用下列配置。

  • Apache Spark 3.0(基于 Apache Hadoop 2.7 编译好的版本)
  • Java 开发套件 1.8.0

如果只想用 Python 进行开发,那么只需要运行 pip install pyspark

排版约定

本书使用下列排版约定。

黑体字

  表示新术语或重点强调的内容。

等宽字体(constant width

  表示程序片段,以及正文中出现的变量名、函数名、数据库、数据类型、环境变量、语句和关键字等。

等宽粗体(constant width bold

  表示应该由用户输入的命令或其他文本。

等宽斜体(constant width italic

  表示应该由用户输入的值或根据上下文确定的值替换的文本。

该图标表示一般注记。

使用代码示例

如果使用代码示例时有技术上的疑惑或者遇到问题,请发送邮件到 bookquestions@oreilly.com 寻求帮助。

本书是要帮你完成工作的。一般来说,你可以把本书提供的代码示例用在你的程序或文档中。除非你使用了很大一部分代码,否则无须联系我们获得许可。比如,用本书的几个代码片段写一个程序就无须获得许可,销售或分发 O'Reilly 图书的示例光盘则需要获得许可;引用本书中的代码示例回答问题无须获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。

我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和 ISBN,比如“Learning Spark, Second Edition, by Jules S. Damji, Brooke Wenig, Tathagata Das, and Denny Lee (O'Reilly). Copyright 2020 Databricks, Inc., 978-1-492- 05004-9”。

如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过 permissions@oreilly.com 与我们联系。

O'Reilly在线学习平台(O'Reilly Online Learning)

40 多年来,O'Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独一无二的由专家和革新者组成的庞大网络,他们通过图书、文章和我们的在线学习平台分享他们的知识和经验。O'Reilly 在线学习平台让你能够按需访问现场培训课程、深入的学习路径、交互式编程环境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本资源和视频资源。更多信息,请访问 https://www.oreilly.com

联系我们

请把对本书的评价和问题发给出版社。

美国:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中国:

  北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)

  奥莱利技术咨询(北京)有限公司

请访问 https://oreil.ly/LearningSpark2,查看相关勘误。2

2本书中文版勘误请到图灵社区本书主页查看和提交。——编者注

对于本书的评论和技术性问题,请发送电子邮件到:bookquestions@oreilly.com

要了解更多 O'Reilly 图书和培训课程等信息,请访问以下网站:https://www.oreilly.com

我们在 Facebook 的地址如下:http://facebook.com/oreilly

请关注我们的 Twitter 动态:http://twitter.com/oreillymedia

我们的 YouTube 视频地址如下:http://www.youtube.com/oreillymedia

致谢

本书是团队共同努力的成果,很多人参与其中,如果没有他们的支持和反馈,我们绝不可能完成本书的创作,尤其是在新冠肺炎疫情带来的前所未有的困境中。

首先,我们要感谢我们的雇主 Databricks 的支持,公司领导在工作中给我们分配了专门的时间来撰写本书。我们要特别感谢 Matei Zaharia、Reynold Xin、Ali Ghodsi、Ryan Boyd 和 Rick Schultz,他们的鼓励使本书第 2 版得以问世。

其次,我们要感谢本书的技术编审:Adam Breindel、Amir Issaei、Jacek Laskowski、Sean Owen,以及 Vishwanath Subramanian。他们根据自己在社区和业界习得的技术专长提出了诚恳且具有建设性的反馈,让本书成为学习 Spark 的宝贵资源。

除了正式的审校人员,我们还从另外一些人那里获得了宝贵的反馈意见,他们对具体的主题和章节有着深刻的理解。在此,我们也想感谢他们做出的贡献。非常感谢 Conor Murphy、Hyukjin Kwon、薛维、Niall Turbitt、范文臣、李潇和李元健。

最后,我们要感谢 Databricks 的同事(因为他们忍受了我们错过或无视项目的截止日期)、我们的家人和爱人(感谢他们的耐心和理解,因为我们常常在工作日和周末的清晨或深夜进行写作),以及整个 Spark 开源社区。如果没有大家的持续贡献,Spark 就不会有今天,我们这些作者也就没那么多内容可写了。

感谢大家!

更多信息

扫描下方二维码,即可获取电子书相关信息及读者群通道入口。