具体描述
本书是使用Spark进行大规模数据分析的实战宝典,由著名大数据公司Cloudera的数据科学家撰写。四位作者首先结合数据科学和大数据分析的广阔背景讲解了Spark,然后介绍了用Spark和Scala进行数据处理的基础知识,接着讨论了如何将Spark用于机器学习,同时介绍了常见应用中几个最常用的算法。此外还收集了一些更加新颖的应用,比如通过文本隐含语义关系来查询Wikipedia或分析基因数据。
作者简介
Sandy Ryza
是Cloudera公司资深数据科学家,Apache Spark项目的活跃代码贡献者。最近领导了Cloudera公司的Spark开发工作。他还是Hadoop项目管理委员会委员。
Uri Laserson
是Cloudera公司资深数据科学家,专注于Hadoop生态系统中的Python部分。
Sean Owen
是Cloudera公司EMEA地区的数据科学总监,也是Apache Spark项目的代码提交者。他创立了基于Spark、Spark Streaming和Kafka的Hadoop实时大规模学习项目Oryx(之前称为Myrrix)。
Josh Wills
是Cloudera公司的高级数据科学总监,Apache Crunch项目的发起者和副总裁。
目录信息
译者序 xi
序 xiii
前言 xv
第1章 大数据分析 1
1.1 数据科学面临的挑战 2
1.2 认识Apache Spark 4
1.3 关于本书 5
第2章 用Scala和Spark进行数据分析 7
2.1 数据科学家的Scala 8
2.2 Spark 编程模型 9
2.3 记录关联问题 9
2.4 小试牛刀:Spark shell和SparkContext 10
2.5 把数据从集群上获取到客户端 15
2.6 把代码从客户端发送到集群 18
2.7 用元组和case class对数据进行结构化 19
2.8 聚合 23
2.9 创建直方图 24
2.10 连续变量的概要统计 25
2.11 为计算概要信息创建可重用的代码 26
2.12 变量的选择和评分简介 30
2.13 小结 31
第3章 音乐推荐和Audioscrobbler数据集 33
3.1 数据集 34
3.2 交替最小二乘推荐算法 35
3.3 准备数据 37
3.4 构建第一个模型 39
3.5 逐个检查推荐结果 42
3.6 评价推荐质量 43
3.7 计算AUC 44
3.8 选择超参数 46
3.9 产生推荐 48
3.10 小结 49
第4章 用决策树算法预测森林植被 51
4.1 回归简介 52
4.2 向量和特征 52
4.3 样本训练 53
4.4 决策树和决策森林 54
4.5 Covtype数据集 56
4.6 准备数据 57
4.7 第一棵决策树 58
4.8 决策树的超参数 62
4.9 决策树调优 63
4.10 重谈类别型特征 65
4.11 随机决策森林 67
4.12 进行预测 69
4.13 小结 69
第5章 基于K均值聚类的网络流量异常检测 71
5.1 异常检测 72
5.2 K均值聚类 72
5.3 网络入侵 73
5.4 KDD Cup 1999数据集 73
5.5 初步尝试聚类 74
5.6 K 的选择 76
5.7 基于R的可视化 79
5.8 特征的规范化 81
5.9 类别型变量 83
5.10 利用标号的熵信息 84
5.11 聚类实战 85
5.12 小结 86
第6章 基于潜在语义分析算法分析维基百科 89
6.1 词项-文档矩阵 90
6.2 获取数据 91
6.3 分析和准备数据 92
6.4 词形归并 93
6.5 计算TF-IDF 94
6.6 奇异值分解 97
6.7 找出重要的概念 98
6.8 基于低维近似的查询和评分 101
6.9 词项-词项相关度 102
6.10 文档-文档相关度 103
6.11 词项-文档相关度 105
6.12 多词项查询 106
6.13 小结 107
第7章 用GraphX分析伴生网络 109
7.1 对MEDLINE文献引用索引的网络分析 110
7.2 获取数据 111
7.3 用Scala XML工具解析XML文档 113
7.4 分析MeSH主要主题及其伴生关系 114
7.5 用GraphX来建立一个伴生网络 116
7.6 理解网络结构 119
7.6.1 连通组件 119
7.6.2 度的分布 122
7.7 过滤噪声边 124
7.7.1 处理EdgeTriplet 125
7.7.2 分析去掉噪声边的子图 126
7.8 小世界网络 127
7.8.1 系和聚类系数 128
7.8.2 用Pregel计算平均路径长度 129
7.9 小结 133
第8章 纽约出租车轨迹的空间和时间数据分析 135
8.1 数据的获取 136
8.2 基于Spark的时间和空间数据分析 136
8.3 基于JodaTime和NScalaTime的时间数据处理 137
8.4 基于Esri Geometry API和Spray的地理空间数据处理 138
8.4.1 认识Esri Geometry API 139
8.4.2 GeoJSON简介 140
8.5 纽约市出租车客运数据的预处理 142
8.5.1 大规模数据中的非法记录处理 143
8.5.2 地理空间分析 147
8.6 基于Spark的会话分析 149
8.7 小结 153
第9章 基于蒙特卡罗模拟的金融风险评估 155
9.1 术语 156
9.2 VaR计算方法 157
9.2.1 方差-协方差法 157
9.2.2 历史模拟法 157
9.2.3 蒙特卡罗模拟法 157
9.3 我们的模型 158
9.4 获取数据 158
9.5 数据预处理 159
9.6 确定市场因素的权重 162
9.7 采样 164
9.8 运行试验 167
9.9 回报分布的可视化 170
9.10 结果的评估 171
9.11 小结 173
第10章 基因数据分析和BDG项目 175
10.1 分离存储与模型 176
10.2 用ADAM CLI导入基因学数据 178
10.3 从ENCODE数据预测转录因子结合位点 185
10.4 查询1000 Genomes项目中的基因型 191
10.5 小结 193
第11章 基于PySpark和Thunder的神经图像数据分析 195
11.1 PySpark简介 196
11.2 Thunder工具包概况和安装 199
11.3 用Thunder加载数据 200
11.4 用Thunder对神经元进行分类 207
11.5 小结 211
附录A Spark进阶 213
附录B 即将发布的MLlib Pipelines API 221
作者介绍 226
封面介绍 226
· · · · · · (收起)
读后感
用户评价
坦白说,当我翻开这本书的时候,我期待的是那种高屋建瓴、直指行业痛点的深度剖析,但这本书带给我的震撼,更多来自于其令人难以置信的实战指导性。它完全跳脱了那种“纸上谈兵”的窠臼,每一章都像是带着你走进一个真实的项目现场。比如,关于流式数据处理的章节,作者没有停留在RDD或DataFrame的表面,而是深入到了Watermark的设计哲学,以及如何处理事件时间与处理时间的偏差,这在很多入门书籍中是绝对看不到的深度。我记得有一个案例,是关于如何使用自定义聚合函数(UDAF)来解决特定业务场景下的指标计算难题,作者不仅提供了完整的Scala代码实现,还贴心地附上了如何在PySpark环境中进行调用的兼容性说明,这种细节的处理,简直是业界良心。它更像是作者多年一线经验的沉淀,那些在实际项目中摸爬滚打才可能领悟到的“陷阱”和“捷径”,都被毫不保留地写在了书里。我感觉自己不是在读一本技术书,而是在跟随一位经验丰富的大佬进行一对一的辅导,每一步都有明确的指引和预期的结果。
这本书简直是数据科学领域的“黑科技”,虽然我手头的这本书叫《Spark高级数据分析》,但从我阅读的体验来看,它更像是一本深入浅出的操作手册,而不是一本枯燥的理论教材。书中对各种数据处理框架的讲解细致入微,特别是对于那些初学者来说,那些复杂的分布式计算概念,作者都能用非常形象的比喻来阐述清楚。比如,在讲到数据倾斜问题时,它并没有直接抛出复杂的数学公式,而是通过一个超市周末促销的场景来类比,让我一下子就明白了问题所在和解决思路。读完关于内存管理和垃圾回收的那几章,我感觉自己对Spark的内部运行机制有了全新的认识,原来我们平时写的一些看似简单的代码,背后涉及到这么多的底层优化。书中提供的代码示例几乎每一个都经过了精心的设计,既能演示核心功能,又考虑到了实际生产环境中的性能瓶颈。我尤其欣赏作者在讲解容错机制时所采取的视角,它不是简单地告诉我们“Spark会重试”,而是深入到DAG调度器和执行阶段的切换,让我们明白“失败后如何优雅地恢复”才是区分优秀系统和普通系统的关键所在。这本书的排版也非常考究,代码块和文字说明的穿插得恰到好处,读起来一点也不累。
这本书的结构设计颇具匠心,它采用了螺旋上升的学习路径,这一点非常适合那些希望系统性提升的读者。开篇部分奠定了坚实的基础,但有趣的是,它并没有过度纠缠于Hadoop的基础知识,而是迅速将焦点转移到了Spark的核心组件上,比如弹性分布式数据集(RDD)的演变和Dataset/DataFrame的优势对比。最让我印象深刻的是中间关于性能调优的论述,它不是堆砌参数列表,而是将参数背后的计算原理和I/O特性紧密结合起来。比如,讨论广播变量的合理使用场景时,作者详细分析了网络带宽与序列化开销的权衡,这让我彻底明白了为什么有时候广播变量反而会拖慢整体速度。接着,后半部分更是将理论推向了工程实践的高峰,对容器化部署和集群管理工具的集成讨论,展现了作者对现代数据架构的深刻理解。这本书的价值在于,它不仅告诉你“怎么做”,更告诉你“为什么这么做是最好的”,这种思维上的提升远比记住几个API调用要宝贵得多。
我得说,这本书的文字风格非常独特,它有一种近乎于“侦探小说”的叙事感,尤其是在描述复杂算法的优化过程时。它不是简单地告诉你某个优化是提升了50%的性能,而是通过一个“性能黑洞”的引入,一步步揭示瓶颈的根源,就像是在剥洋葱一样,每剥开一层,都能看到更深层次的结构。特别是当涉及到数据分区和Shuffle策略的探讨时,作者运用了大量动态的图示和流程分解,即便是我这种对底层网络传输不太敏感的读者,也能清晰地勾勒出数据在集群中迁移的路径和损耗。这本书对于掌握Scala/Python的读者都很友好,因为它平衡了不同语言的特性。例如,在讲解Spark SQL的Catalyst优化器时,它首先用伪代码展示了逻辑计划的转换,然后才具体到如何使用`explain()`命令来验证这些优化是否生效。这使得读者能够从抽象的优化理念,快速落地到可执行的代码验证,大大缩短了学习曲线。
这本书给我的感觉是,它在“深度”和“广度”之间找到了一个近乎完美的平衡点。它不仅仅停留在对Spark Core API的介绍上,更拓展到了更宏观的生态系统集成。我尤其欣赏其中关于与外部存储系统(如Cassandra、Elasticsearch)进行高效数据交换的部分,这些内容在很多声称是“高级”的教材中往往会被一笔带过。但在这里,作者详细分析了Predicate Pushdown和Projection Pruning在这些外部连接器中的实际效果,以及如何根据存储系统的特性来定制Spark的读写策略。这本书的价值在于,它培养了一种系统级的思考方式,让你不再将Spark视为一个孤立的计算引擎,而是整个大数据管道中的一个关键节点。读完此书,我不再满足于让代码跑起来,而是开始审视如何让它在TB甚至PB级别的数据集上以最高效、最健壮的方式运行。它确实是一本能将“熟练使用者”蜕变为“架构设计者”的必备参考书。
看了前面几个案例,由于都是用spark mllib库以及rdd,相对来说有点旧了。只是作为一本参考读物看看即可
每一篇文章可以看成作者对这一主题的研究. 点到为止的基本概念, 具有实操性的例子. 对数据分析,连引用的数据集也是基于现实世界. 内容满分. 这种写作方式也满分
读过英文版,主要介绍spark,但是不够深入
居然能在这本书上看到My Chemical Romance和Linkin Park
读过英文版,主要介绍spark,但是不够深入