前 言
随着数据量的持续膨胀,企业决策也变得日益复杂。因此,如果你还想使用传统的分析方法来洞察数据从而推动企业前进的话,那么,不断增长的数据将给你带来巨大障碍。现在,大数据涉及的领域太广泛了,它与各种框架之间存在千丝万缕的关系。以至于大数据的定义也与这些框架能够处理的范围产生了联系。无论你在检查来自百万访问者的点击流数据,从而优化在线广告的投放位置,还是过滤数十亿的事务数据,以便鉴定危险或欺诈信息,这些行为都需要高级的分析技术,例如机器学习和图运算,从而能在远超以往的大量数据中进行自动洞察与分析操作。
作为大数据处理、分析以及跨越学术界和工业界的数据科学等领域的事实上的标准,Apache Spark提供了机器学习和图运算程序包,从而能让企业基于高可扩展性及集群化的计算机设备,轻松地处理诸多复杂问题。不仅如此,Spark还允许你使用Scala语言来编写分布式程序,就像为Spark编写普通程序那样简单。Spark为ETL数据传输带来了巨大的性能提升,也能让那些原来的MapReduce程序员们从Hadoop复杂的编程模型中部分解脱出来。
在《Scala和Spark大数据分析 函数式编程、数据流和机器学习》中,我们将竭力为你带来基于Spark和Scala的最先进数据分析技术,包括机器学习、图运算、流处理以及Spark SQL。当然,也包括MLlib、ML、SQL、GraphX以及其他程序库。
我们先从Scala开始,然后逐步进入Spark部分,最后将涵盖基于Spark和Scala的大数据处理的一些高级主题。在附录中,将扩展你的Scala知识,介绍SparkR、PySpark、Apache Zeppelin以及基于内存的Alluxio等。《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的内容并不需要你逐章完整阅读,你可以根据自己的兴趣,随意跳跃性翻阅感兴趣的章节。
祝你阅读愉快!
内容简介
第1章“Scala简介”将基于Scala语言使用Spark的API,从而教给你大数据处理技术。Spark本身就是用Scala编写的,因此,我们很自然地以Scala的简介作为《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的开始。简介包括Scala的历史、设计目的,以及如何在Windows、Linux以及macOS上安装Scala。此后,我们将探讨Scala的Web框架。再后对Java和Scala做对比分析。最后将研究Scala程序设计从而开始使用Scala。
第2章“面向对象的Scala”讲述面向对象的程序设计(OOP)范例,提供了一个全新的抽象层。简单来说,该章描述面向对象程序设计语言的一些强大之处:可发现性、模块性和可扩展性。尤其将讲述如何处理Scala中的变量、方法、类和对象。还讨论包、包对象、特征以及特征的线性化。当然,还有与Java的互操作性。
第3章“函数式编程概念”将列出Scala中函数式编程的基本概念。具体而言,我们将学习如下几个议题,Scala为何是数据科学的兵工厂,为何学习Spark范例、纯函数以及高阶函数(Higher-Order Function,HOF)很重要。同时将展示在真实世界中使用HOF的用户案例。然后,我们将了解如何使用Scala的标准库函数,来在集合之外处理高阶函数中的异常。最后,将学习函数式Scala如何影响对象的可变性。
第4章“集合API”将介绍一个会影响大部分Scala用户的特性——集合API。该特性很强大且颇具弹性。我们将展示Scala集合API的能力,以及如何有序地使用它来处理不同的数据类型,并解决各种复杂问题。在该章中,我们将探讨Scala的集合API、类型以及层级,还有一些性能方面的议题,与Java的互操作性,还有Scala的隐式转换。
第5章“狙击大数据——Spark加入战团”将简要描述数据分析与大数据。将讨论大数据带来的挑战如何被分布式计算以及函数式编程所处理。我们将介绍谷歌的MapReduce、Apache Hadoop和Apache Spark。我们也将了解到为何Apache Spark会首先被创建出来;面对大数据分析与处理的挑战,Apache Spark又能带来怎样的价值。
第6章“开始使用Spark——REPL和RDD”将介绍Spark的工作原理,然后介绍RDD(Apache Spark的基本抽象概念),讲述它们是怎样的分布式集合,以及如何使用类似Scala的API进行操作。我们也将了解Apache Spark在部署方面的一些选项,以及如何以Spark shell方式在本地运行。我们也将深入学习Apache Spark的一些内部原理,例如RDD的含义、DAG和RDD的血统机制、transformation算子以及action算子。
第7章“特殊RDD操作”将关注RDD是如何被冗余并满足各种不同需求的,以及RDD如何提供新功能。不仅如此,我们还将了解Spark提供的其他有用对象,如广播变量和累加器(accumulator)。我们也将学习聚合技术shuffle。
第8章“介绍一个小结构——Spark SQL”将讲解如何使用Spark分析结构化数据,Spark是如何将结构化数据作为RDD的高阶抽象来处理的,以及Spark SQL的API是如何让查询结构化数据变得简单并足够健壮。还将介绍数据集(dataset),讲述数据集、DataFrame以及RDD之间的区别。也将讨论如何使用DataFrame API,从而利用连接操作和窗口函数执行复杂的数据分析。
第9章“让我流起来,Scotty——Spark Streaming”将讲述如何使用Spark Streaming,并利用Spark API来高效地处理流式数据。不仅如此,在该章中,还将介绍处理实时数据流的不同方法,列举一个真实的案例来演示来自Twitter的信息是如何被使用和处理的。我们也将看到与Apache Kafka的集成。还将看到结构化的流数据,它们将能为应用提供实时查询功能。
第10章“万物互联——GraphX”旨在使你了解到,真实世界中的许多问题都通过图运算进行建模并加以解决。我们将看到基于Facebook的例子,分析如何使用图论,其中包含Apache Spark的图运算程序库GraphX、VertexRDD、EdgeRDD、图操作、aggregateMessages、triangleCount、Pregel API以及用户案例(如PageRank算法等)。
第11章“掌握机器学习——Spark MLlib和ML”旨在提供统计机器学习的一些概念性介绍。我们将关注Spark的机器学习API(称为Spark MLlib和ML)。接下来将讨论如何使用决策树和随机森林算法解决分类问题,以及如何使用线性回归算法解决回归问题。你也将看到,在训练分类模型前,我们是如何在特征提取中使用OneHotEncoder和降维算法来获得好处的。在该章的最后,还将一步步地展示一个例子,来讲述怎样开发一个基于协同过滤的电影推荐系统。
第12章“贝叶斯与朴素贝叶斯”讲述大数据与机器学习。大数据与机器学习已经成为一个激进的组合,给研究领域(无论是学术领域还是工业领域)带来巨大影响。大数据给机器学习、数据分析工具以及算法都带来了巨大挑战,因为它们都需要发现真正的价值。但是,基于现有的这些海量数据集来预测未来从来都不是容易的事情。在该章中,我们将深入研究机器学习,并找出如何使用简单但强大的方法,来创建一个具备可扩展性的分类模型,同时将介绍相关的概念,例如多元分类、贝叶斯分类、朴素贝叶斯、决策树,以及朴素贝叶斯与决策树之间的对比分析。
第13章“使用Spark MLlib对数据进行聚类分析”将介绍常见的聚类算法,并通过大量实例,让你掌握这一机器学习领域中被广泛应用的技术。
第14章“使用Spark ML进行文本分析”将简要讲解如何使用Spark ML进行文本分析。文本分析是机器学习领域中一个很宽广的区域,它在很多用户场景下都极为有用,例如情感分析、聊天机器人、垃圾邮件检测、自然语言处理(NLP)以及其他很多场景。我们将学到如何使用Spark进行文本分析,该用例来自包含10 000个样例集合的Twitter数据,我们要对其进行文本分类。我们也将学习LDA(隐含狄利克雷分布),这是一项颇为流行的技术,它能从文档中生成对应的主题而不必知晓真实的文档内容,然后我们会基于这些Twitter数据实施文本分类,看一下具体的结果会是怎样的。
第15章“Spark调优”深入探究Apache Spark的内部机制,我们会觉得在使用Spark时,感觉就像是在使用另一个Scala集合一样,但不要忘了,Spark实际上是在一个集群中运行的。因此,该章将关注如何监控Spark任务,如何进行Spark配置,如何处理Spark应用开发过程中经常遇到的错误,还将介绍一些优化技术。
第16章“该聊聊集群了——在集群环境中部署Spark”将研究Spark及其底层架构是如何在集群中工作的。我们将了解集群中的Spark架构、Spark生态系统以及集群管理等内容。当然,还有如何在独立服务器模式、Mesos、YARN以及AWS集群上部署Spark。我们也将探讨如何在一个基于云的AWS集群上部署应用。
第17章“Spark测试与调试”将解释分布式应用的测试难度。我们将看到一些处理方法。我们也将看到如何在分布式环境中进行测试,以及如何测试和调试Spark应用。
第18章“PySpark与SparkR”将涵盖其他两个常用的API。可使用Python或R语言来编写Spark代码,也就是PySpark和SparkR。具体地说,将介绍如何使用PySpark,以及如何与DataFrame API和UDF进行交互,然后我们就可以使用PySpark来执行一些数据分析了。然后将介绍如何使用SparkR,也将介绍如何使用SparkR进行数据处理与操作,以及如何与RDD和DataFrame协同工作。最后,一些数据可视化工作也可以使用SparkR。
第19章“高级机器学习最佳实践”从理论和实践两个方面探讨Spark机器学习的一些高级议题。我们将看到如何使用网格搜索、交叉检验以及超参调整等方法对机器学习模型进行调优,以获取更好的性能。接下来将研究如何使用ALS来开发一个可扩展的推荐系统。这里,ALS是一个基于模型的推荐系统算法。最后将展示一个主题建模应用,作为文本聚类技术的一个示例。
附录A“使用Alluxio加速Spark”将展示如何使用Alluxio结合Spark来加快处理速度。Alluxio是一个开源的内存存储系统,它对于很多跨平台的应用都很有用,能提升这些应用的处理速度。我们将研究使用Alluxio的可能性,以及集成Alluxio是如何在我们每次运行Spark任务时,不需要缓存数据就能提供更好性能的。
附录B“利用Apache Zeppelin进行交互式数据分析”从数据科学的角度出发,讲述交互式可视化数据分析的重要性。Apache Zeppelin是一个基于Web的记事本,可用于交互式和大规模数据分析,它可以使用多后端和解释器。该章将研究如何使用Apache Zeppelin,并将Spark作为其后端解释器,来进行大规模数据分析。
学习《Scala和Spark大数据分析 函数式编程、数据流和机器学习》时所需的准备工作
《Scala和Spark大数据分析 函数式编程、数据流和机器学习》中的所有例子都基于Ubuntu Linux 64位版本,使用Python 2.7和Python 3.5实现,其中使用的TensorFlow函数库版本为1.0.1。《Scala和Spark大数据分析 函数式编程、数据流和机器学习》中展示的源代码是兼容Python 2.7的;兼容Python 3.5+的源代码可从Packt出版社的资料库中自行下载。你也需要如下Python模块(最新版本尤佳):
● Spark 2.0.0或更高版本
● Hadoop 2.7或更高版本
● Java(JDK和JRE)1.7+/1.8+
● Scala 2.11.x或更高版本
● Python 2.7+/3.4+
● R 3.1+以及RStudio 1.0.143或更高版本
● Eclipse Mars、Oxygen或Luna(最新版本)
● Maven Eclipse plugin (2.9或更高版本)
● Maven compiler plugin for Eclipse (2.3.2或更高版本)
● Maven assembly plugin for Eclipse (2.4.1或更高版本)
操作系统:优先推荐Linux发行版(包括Debian、Ubuntu、Fedora、RHEL以及CentOS),更精确地说,对于Ubuntu,推荐版本为64位14.04(LTS)或更新版本,推荐使用VMWare player 12或Virtual box。可在Windows(XP/7/8/10)或Mac OS X(10.4.7+)上运行Spark任务。
硬件配置:处理器核心为i3、i5(推荐)或i7(可获得最佳效果)。但是,多核心处理器可以提供更快的数据处理和更好的可扩展性。对于独立服务器模式,需要至少8~16GB的内存(推荐配置);对于集群而言,单一的VM或更多的VM则至少需要32GB内存。你也需要有足够的存储来执行工作量大的任务(具体取决于要处理的数据集的大小),建议使用的存储至少有50GB的空闲空间(用于支持独立服务器模式以及SQL仓库)。
《Scala和Spark大数据分析 函数式编程、数据流和机器学习》读者对象
所有期望使用强大的Spark来进行数据分析的人们,都会意识到《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的内容极具价值。你不需要具备Spark或Scala的相关知识,当然,如果你此前就有编程经验的话(尤其是掌握其他JVM编程语言),在学习《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的相关概念时,你掌握知识的速度就会比较快。在过去数年间,Scala语言正逐步为人们所接纳采用,一直呈现出稳定的上升态势,在数据科学与分析领域尤其如此。与Scala齐头并进的是Apache Spark,它由Scala语言编写而成,并且在数据分析领域得到了极广泛的应用。《Scala和Spark大数据分析 函数式编程、数据流和机器学习》将帮助你掌握这两种工具,从而让你在大数据处理领域大显身手。
约定
注意:
警示或重要提示。
小技巧:
技巧和诀窍。
读者反馈
我们一直希望能够收到读者的反馈意见。让我们知道你对这本书的看法——你喜欢的部分或不喜欢的部分——这对我们非常重要。因为它可以帮助我们真正编写出可以充分使用的书籍。如果想向出版社发送反馈,可以直接发送电子邮件至feedback@packtpub.com,并在邮件中注明《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的书名即可。
下载样例代码
可访问http://www.tupwk.com.cn/downpage/网站,输入《Scala和Spark大数据分析 函数式编程、数据流和机器学习》ISBN或中文书名下载《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的样例代码。
一旦下载完《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的代码文件,就可以使用下列文件的最新版本来解压缩:
● 对于Windows平台而言,可使用WinRAR/7-Zip。
● 对于macOS而言,可使用Zipeg/iZip/UnRarX。
● 对于Linux而言,可使用7-Zip/PeaZip。
另外,也可扫《Scala和Spark大数据分析 函数式编程、数据流和机器学习》封底二维码下载相关资料。
勘误
尽管我们已经尽了最大努力来确保《Scala和Spark大数据分析 函数式编程、数据流和机器学习》中内容的正确性,但错误依然无法避免。因此,如果你在阅读《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的过程中发现了错误——无论是代码错误还是文本错误,都请与我们联系,我们对此将深表感激。
侵权
互联网上版权材料的盗版问题一直存在。我们非常重视知识产权的保护。因此,如果你在互联网上发现了《Scala和Spark大数据分析 函数式编程、数据流和机器学习》任何形式的非法副本,也请立即与我们联系。
问题
如果你在阅读《Scala和Spark大数据分析 函数式编程、数据流和机器学习》的过程中发现了任何问题,请与我们联系。