书海网短评:
适读人群:Spark的学习者及相关从业人员使用敏捷数据科学的开发方法论将科研成果转化为有意义的数据科学应用;使用Python、Spark、Elasticsearch、Kafka、MongoDB、D3.j
使用敏捷数据科学的开发方法论将科研成果转化为有意义的数据科学应用;
使用Python、Spark、Elasticsearch、Kafka、MongoDB、D3.js构建、部署、完善任意规模的数据分析应用;
帮助产品团队学会使用敏捷的方式协作开发分析应用来保障工作成效;
帮助你成长为数据科学与数据分析团队的主力成员。
《Spark全栈数据分析》介绍了作者提出的基于Spark的敏捷数据科学方法论,结合作者在行业中多年的实际工作经验,为数据科学团队提供了一套以类似敏捷开发的方法开展数据科学研究的实践方法。书中展示了工业界一些常见工具的使用,包括从前端显示到后端处理的各个环节,手把手地帮助数据科学家快速将理论转化为真正面向用户的应用程序,从而让读者在利用数据创造真正价值的同时,也能不断完善自己的研究。
《Spark全栈数据分析》适合初学者阅读,数据科学家、工程师、分析师都能在《Spark全栈数据分析》中有所收获。
RussellJurney在赌场游戏中练出了数据分析的技能,构建了网络应用程序分析美国和墨西哥的老虎机的表现。在涉足创业、互动媒体、记者等行业后,他搬到硅谷,在Ning和LinkedIn构建分析型应用。Russell现在是DataSyndrome的首席顾问,他帮助公司使用《Spark全栈数据分析》所介绍的原则和方法构建分析性产品。
王道远,毕业于浙江大学,目前就职于阿里巴巴计算平台事业部,在加入阿里巴巴之前,曾在英特尔亚太研发有限公司大数据部门工作了五年。
目录
前言xiv
第Ⅰ部分 准备工作
第1章 理论3
导论3
定义5
方法学5
敏捷数据科学宣言6
瀑布模型的问题10
研究与应用开发11
敏捷软件开发的问题14
最终质量:偿还技术债14
瀑布模型的拉力15
数据科学过程16
设置预期17
数据科学团队的角色18
认清机遇与挑战19
适应变化21
过程中的注意事项23
代码审核与结对编程25
敏捷开发的环境:提高生产效率25
用大幅打印实现想法27
第2章 敏捷工具29
可伸缩性=易用性30
敏捷数据科学之数据处理30
搭建本地环境32
配置要求33
配置Vagrant33
下载数据33
搭建EC2环境34
下载数据38
下载并运行代码38
下载代码38
运行代码38
Jupyter笔记本39
工具集概览39
敏捷开发工具栈的要求39
Python339
使用JSON行和Parquet序列化事件42
收集数据45
使用Spark进行数据处理45
使用MongoDB发布数据48
使用Elasticsearch搜索数据50
使用ApacheKafka分发流数据54
使用PySparkStreaming处理流数据57
使用scikit-learn与SparkMLlib进行机器学习58
使用ApacheAirflow(孵化项目)进行调度59
反思我们的工作流程70
轻量级网络应用70
展示数据73
本章小结75
第3章 数据77
飞行航班数据77
航班准点情况数据78
OpenFlights数据库79
天气数据80
敏捷数据科学中的数据处理81
结构化数据vs.半结构化数据81
SQLvs.NoSQL82
SQL83
NoSQL与数据流编程83
Spark:SQL+NoSQL84
NoSQL中的表结构84
数据序列化85
动态结构表的特征提取与呈现85
本章小结86
第Ⅱ部分 攀登金字塔
第4章 记录收集与展示89
整体使用90
航班数据收集与序列化91
航班记录处理与发布94
把航班记录发布到MongoDB95
在浏览器中展示航班记录96
使用Flask和pymongo提供航班信息97
使用Jinja2渲染HTML5页面98
敏捷开发检查站102
列出航班记录103
使用MongoDB列出航班记录103
数据分页106
搜索航班数据112
创建索引112
发布航班数据到Elasticsearch113
通过网页搜索航班数据114
本章小结117
第5章 使用图表进行数据可视化119
图表质量:迭代至关重要120
用发布/装饰模型伸缩数据库120
一阶形式121
二阶形式122
三阶形式123
选择一种形式123
探究时令性124
查询并展示航班总数124
提取“金属”(飞机(实体))132
提取机尾编号132
评估飞机记录139
数据完善140
网页表单逆向工程140
收集机尾编号142
自动化表单提交143
从HTML中提取数据144
评价完善后的数据147
本章小结148
第6章 通过报表探索数据149
提取航空公司为实体150
使用PySpark把航空公司定义为飞机的分组150
在MongoDB中查询航空公司数据151
在Flask中构建航空公司页面151
添加回到航空公司页面的链接152
创建一个包括所有航空公司的主页153
整理半结构化数据的本体关系154
改进航空公司页面155
给航空公司代码加上名称156
整合维基百科内容158
把扩充过的航空公司表发布到MongoDB159
在网页上扩充航空公司信息160
调查飞机(实体)162
SQL嵌套查询vs.数据流编程164
不使用嵌套查询的数据流编程164
SparkSQL中的子查询165
创建飞机主页166
在飞机页面上添加搜索167
创建飞机制造商的条形图172
对飞机制造商条形图进行迭代174
实体解析:新一轮图表迭代177
本章小结183
第7章 进行预测185
预测的作用186
预测什么186
预测分析导论187
进行预测187
探索航班延误189
使用PySpark提取特征193
使用scikit-learn构建回归模型198
读取数据198
数据采样199
向量化处理结果200
准备训练数据201
向量化处理特征201
稀疏矩阵与稠密矩阵203
准备实验204
训练模型204
测试模型205
小结207
使用SparkMLlib构建分类器208
使用专用结构加载训练数据208
处理空值210
用Route(路线)替代FlightNum(航班号)210
对连续变量分桶以用于分类211
使用pyspark.ml.feature向量化处理特征219
用SparkML做分类221
本章小结223
第8章 部署预测系统225
把scikit-learn应用部署为网络服务225
scikit-learn模型的保存与读取226
提供预测模型的准备工作227
为航班延误回归分析创建API228
测试API232
在产品中使用API232
使用Airflow部署批处理模式SparkML应用234
在生产环境中收集训练数据235
SparkML模型的训练、存储与加载237
在MongoDB中创建预测请求239
从MongoDB中获取预测请求245
使用SparkML以批处理模式进行预测248
用MongoDB保存预测结果252
在网络应用中展示批处理预测结果253
用ApacheAirflow(孵化项目)自动化工作流256
小结264
用SparkStreaming部署流式计算模式SparkML应用264
在生产环境中收集训练数据265
SparkML模型的训练、存储、读取265
发送预测请求到Kafka266
用SparkStreaming进行预测277
测试整个系统283
本章小结285
第9章 改进预测结果287
解决预测的问题287
什么时候需要改进预测288
改进预测表现288
黏附试验法:找出黏性好的288
为试验建立严格的指标289
把当日时间作为特征298
纳入飞机数据302
提取飞机特征302
在分类器模型中纳入飞机特征305
纳入飞行时间310
本章小结313
附录A 安装手册315
安装Hadoop315
安装Spark316
安装MongoDB317
安装MongoDB的Java驱动317
安装mongo-hadoop318
编译mongo-hadoop318
安装pymongo_spark318
安装Elasticsearch318
安装Elasticsearch的Hadoop支持库319
配置我们的Spark环境320
安装Kafka320
安装scikit-learn320
安装Zeppelin321
译者序
这几年,大数据、人工智能都是计算机学科中非常热门的话题,数据科学也越来越受到各公司的关注。我接触到的很多不同行业的公司都对大数据与人工智能的应用跃跃欲试,甚至部分公司早已尝到其中的甜头。不过还有很多公司并没有真正用上它们那些本应蕴含着无穷价值的数据,也有很多公司已经学会从数据中挖掘信息,但得到的信息无法及时转化为真正的价值。毕竟大数据还是比较新的技术,大多数公司还在探索中前进。很多公司早就拥有了自己的应用开发团队,雇佣一些数据科学的专家也并不难,难的是如何让开发工程师和数据科学家理解对方的工作,把他们整合到一个团队中,从而真正创造出价值。
《Spark全栈数据分析》作者对数据有天生的热情,且通过在各种行业的工作经历形成了对不同角色的理解,更拥有多年的实际数据分析应用开发经验。在他的职业生涯中,也曾遇到过很多公司在尝试运用数据分析时会遇到的各种问题。如今,他在咨询公司工作,专门帮助各种公司进行大数据方面的数据分析。《Spark全栈数据分析》正是作者多年经验的总结与升华,涵盖了从团队建设、工作制度到工具选择、任务划分与执行的方方面面。《Spark全栈数据分析》还以一个完整的项目为例,贯穿《Spark全栈数据分析》,展示了敏捷数据科学的整个流程,这也是我最喜欢《Spark全栈数据分析》的地方。从具体案例出发,让有需求的读者能够更快地依葫芦画瓢,也让初学者能够从做中学,让读者能根据自己的感受,更好地领会作者提出的“敏捷数据科学”的精髓。
Spark是当前大数据领域最为主流的项目,有着远超HadoopMapReduce的性能,可以说是大数据领域的事实标准。能有今天的地位,Spark的易用性功不可没。正因此,作者在《Spark全栈数据分析》中选择了Spark作为大数据处理框架。易于上手的Spark确实是敏捷项目的不二选择。
不过,Spark虽然兼具易用与高性能的特点,但不代表Spark的性能不会在实际应用中出现问题。事实上,随着业务日趋复杂,Spark应用也会遇到各种不能通过扩展集群规模来解决的问题,并不是用上Spark就代表算法能够适用于海量数据的场景了,这也是《Spark全栈数据分析》缺失的部分。不过不用过于担心,高性能的算法与集群架构也都是慢慢演进出来的,不妨让我们在下一个敏捷冲刺中不断完善我们的应用吧!
翻译《Spark全栈数据分析》的时候我还在英特尔工作,英特尔是我工作的第一家公司,在这里我有幸从2012年起接触大数据,并从2014年起就接触到Spark。虽然我已经离开,但我会始终感激和怀念在英特尔成长的时光。《Spark全栈数据分析》的翻译主要在周末和假期完成,感谢家人和朋友们对我的关心和理解。感谢博文视点的刘恩惠老师和顾慧芳老师在《Spark全栈数据分析》审校工作中的辛勤付出,感谢张玲老师引荐我翻译《Spark全栈数据分析》,也感谢刘恩惠老师和张玲老师在我拖稿时对我的宽容和鼓励。
这是一个发展迅猛的领域,《Spark全栈数据分析》出版时,书中的许多工具(比如Spark)可能已经又有了很多更新;《Spark全栈数据分析》所涉及的远远不止大数据和数据分析,还包括前端开发、团队管理等内容。由于我水平有限,难免有纰漏之处,希望读者能不吝指正,有疑惑之处,不妨也与我探讨。我的邮箱是me@daoyuan.wang。
王道远
2018年夏
前言
写作《Spark全栈数据分析》第1版的那段日子里,我刚好因为一次车祸而残疾,每天忍受疼痛折磨,双手也有些不听使唤。当时,一个叫作“职业浏览器”的项目的失败经历正困扰着我,为了从阴影中走出来,我用iPad在床上和沙发上写完了《Spark全栈数据分析》,尽管那时我的手都没办法切菜了。我在那个项目发布前几周受了伤,还想着坚持把项目做上线,日夜奋战,非常痛苦。在做项目的过程中,我们犯了许多低级错误,让我一直垂头丧气。最终产品糟透了。项目失败的挫折感不时让我难受,而我背部的慢性疼痛更是很少放过我。我的心脏也出了一些问题,心率下降了三分之一,记忆力也出现了衰退。我仿佛进入了一个幽暗的空间,难以找到出路。我要恢复起来,与失败抗争。说来有些奇怪,为了让自己恢复,我写了第1版书。我要把我能给团队同事的指导写下来,确保下一个项目成功。我想让自己摆脱这段经历。更重要的是,我想通过帮助别人,让我的人生重新获得意义,不让自己被残疾击垮。这样一件为大众服务以确保其他人不会重复我的错误的好事,我认为是值得去做的。那个失败项目暴露出了一个比我自身的处境更严重的问题,那就是大多数研究都停留在纸面上,从未让能够获益的人实际使用到。这《Spark全栈数据分析》就是一剂良方,是应用性研究的方法论,让研究成果能以产品的形式真正面世。
虽然听起来有些戏剧性,但我还是想在介绍第2版之前提一提写第1版时的个人情况。尽管那一版书对我来说有特殊的意义,但对于数据科学这个欣欣向荣的领域而言只做出了很小的贡献。但是我为它而自豪。我在那《Spark全栈数据分析》中获得了救赎,它让我重新找回了感觉,让我及时从病痛中恢复,让我摆脱失败的痛苦而获得了成就的喜悦,这就是第1版的情况。
在第2版中,我希望能做到更多。简单地说,我希望能引导初出茅庐的数据科学家,让其快速成长为数据分析应用开发者。我把自己在三个Hadoop团队与一个Spark团队中获得的构建分析应用的经验进行了总结和提炼。这次改版中,编程语言使用的是数据科学的通用语言Python,而选择的大数据平台是Spark。希望《Spark全栈数据分析》能成为读者的必备指南,让读者快速学会如何构建足以应对各种数据规模的分析应用。
Spark取代Hadoop/MapReduce成为了处理大规模数据的主流方式,因此我们在这一版中使用Spark来讲解。不仅如此,根据我们团队在工作中对敏捷数据科学的进一步理解,《Spark全栈数据分析》对敏捷数据科学方法论的理论和发展也做了进一步完善。希望第1版的读者还可以从第2版中获得提高,也希望比起相对更适合Hadoop用户阅读的第1版,这一版能更好地服务于Spark用户。
敏捷数据科学有两大目标:一是为了使用Python和Spark搭建出任意规模的数据分析应用,二是帮助产品团队学会使用敏捷的方式协作开发分析应用来保障工作成效。
《Spark全栈数据分析》目标读者
《Spark全栈数据分析》的目的是帮助初学者和初出茅庐的数据科学家成长为数据科学与数据分析团队的主力成员。《Spark全栈数据分析》想要帮助工程师、分析师、数据科学家以敏捷的方式来使用Hadoop在大数据上进行工作。《Spark全栈数据分析》介绍的敏捷方法论很适合大数据领域。
《Spark全栈数据分析》是为需要开发软件来分析数据的程序员而写的。设计师和产品经理可能更适合第1章、第2章和第5章,这些章节主要作为敏捷过程的导论,没有专注于编码运行。
《Spark全栈数据分析》假设你在类UNIX环境中工作,没有为Windows用户提供示例,不过Windows用户可以使用Cygwin尝试。
《Spark全栈数据分析》主要结构
《Spark全栈数据分析》分为两个部分。第Ⅰ部分介绍的是我们在第Ⅱ部分中需要用到的数据集和工具集。第Ⅰ部分故意写得简明扼要,只是为了尽可能快地介绍这些工具。第Ⅱ部分会更深入地探讨这些工具的使用,所以如果在读第Ⅰ部分时感觉有些不知所措也不用担心。第Ⅰ部分的章节如下。
第1章理论
介绍敏捷数据科学的方法论。
第2章敏捷工具
介绍要用的工具集,并且讲解工具如何上手与安装。
第3章数据
描述《Spark全栈数据分析》中使用的数据集。
第Ⅱ部分是我们使用敏捷数据科学来构建一个分析应用的教程。这是一份笔记本式的分析应用构建指南。我们逐层攀登数据价值金字塔,始终应用敏捷的原则。这一部分会展示在敏捷迭代进程中一步一步发掘数据价值的方法。第Ⅱ部分由以下所列章节组成。
第4章记录收集与展示
帮你下载航班数据,并且通过网络应用展示航班记录。
第5章使用图表进行数据可视化
一步步引导你如何在网络应用中加入一些简单的图表来展示数据。
第6章通过报表探索数据
教你如何从数据中提取出实体关系,将其参数化并相互关联以创建交互式的报表。
第7章进行预测
在先前所做的基础上对某一航班准点与否进行预测。
第8章部署预测系统
展示如何部署预测系统来确保真正发挥作用。
第9章改进预测结果
不断迭代提高我们的准点航班预测应用的表现。
附录A安装手册
展示如何安装所需工具。









