主编推荐语
这本书教授可伸缩编程,涵盖Hadoop、Spark、AWS等技术,旨在帮助你处理大数据集和加速决策过程。
内容简介
这本书教你写代码,让你可以处理任何大小的数据集。你将从笔记本大小的数据集开始,这些数据集通过将大任务分解为可以自动运行的小任务来教你并行处理数据分析。然后将这些相同的程序扩展到云服务器上的工业级数据集。根据地图坚定地降低范式,你将探索像Hadoop和PySpark这样的工具来有效地处理大量的分散式的数据集,通过使用机器学习来加速决策过程,和通过使用AWS S3来简化数据存储。本书的目标是教授一种可伸缩的编程风格。为了做到这一点,我们将涉及一些你可能不熟悉的编程或技术书籍。虽然其他书籍可能只会介绍某一个函数库库,而本书则会涉及许多函数库—既有内置的模块,例如functools和itertools,也有第三方库,例如toolz、pathos和mrjob。其他的书籍可能只会涉及某一项技术,而这本书会涉及很多技术,包括Hadoop、Spark和Amazon Web Services (AWS)。本书选择覆盖更广泛的技术是为了承认这样一个事实:为了让代码具有可伸缩性,你需要能够适应新的情况。
目录
- 封面
- 版权信息
- 内容简介
- 译者序
- 前言
- 致谢
- 关于本书
- 关于作者
- 关于封面插图
- 第1部分
- 1 入门介绍
- 1.1 你将从本书中学到什么
- 1.2 为什么是大型数据集
- 1.3 什么是并行计算
- 1.3.1 理解并行计算
- 1.3.2 拥有map和reduce编程风格的可扩展计算
- 1.3.3 何时应该使用map和reduce编程风格
- 1.4 map和reduce编程风格
- 1.4.1 用来转换数据的map函数
- 1.4.2 用于高级转换的reduce函数
- 1.4.3 用于数据转译管道的map和reduce函数
- 1.5 可提升速度和可扩展性的分布式计算
- 1.6 Hadoop:一个map和reduce的分布式框架
- 1.7 提供高性能map、reduce和其他功能的Spark
- 1.8 AWS Elastic MapReduce——云上的大型数据集
- 总结
- 2 加速大型数据集处理任务:map函数和并行计算
- 2.1 map函数简介
- 2.1.1 通过map函数来获取URL
- 2.1.2 惰性函数(比如map)对大型数据集的强大功能
- 2.2 并行处理
- 2.2.1 处理器和处理过程
- 2.2.2 并行化和序列化
- 2.2.3 顺序和并行化
- 2.2.4 状态和并行化
- 2.3 把它们拼在一起:抓取维基百科(Wikipedia)网站
- 2.3.1 可视化我们的图
- 2.3.2 回到map函数
- 2.4 练习
- 2.4.1 并行化的问题
- 2.4.2 map函数
- 2.4.3 并行化和速度
- 2.4.4 存储序列化
- 2.4.5 Web抓取数据
- 2.4.6 异构的map转换
- 总结
- 3 用来映射复杂转换的函数管道
- 3.1 辅助函数和函数链
- 3.2 揭露黑客的通信手段
- 3.2.1 创建辅助函数
- 3.2.2 创建一个管道
- 3.3 Twitter人口预测
- 3.3.1 推文级别的管道
- 3.3.2 用户级别的管道
- 3.3.3 应用管道
- 3.4 练习
- 3.4.1 辅助函数和函数管道
- 3.4.2 数学老师的“把戏”
- 3.4.3 恺撒密码
- 总结
- 4 用惰性工作流来处理大型数据集
- 4.1 什么是惰性计算
- 4.2 一些你需要知道的惰性函数
- 4.2.1 用filter函数过滤序列
- 4.2.2 用zip函数合并序列
- 4.2.3 用iglob函数进行惰性文件搜索
- 4.3 理解迭代器:Python惰性能力背后的魔法
- 4.3.1 惰性Python的支柱:迭代器
- 4.3.2 生成器:用来创建数据的函数
- 4.4 诗歌谜题:如何惰性处理大型数据集
- 4.4.1 生成这个示例的数据
- 4.4.2 用iglob函数来读取诗的内容
- 4.4.3 清理诗的正则表达式类
- 4.4.4 计算诗歌内容的比率
- 4.5 惰性模拟:模拟渔村场景
- 4.5.1 创建一个村庄类
- 4.5.2 为我们的渔村场景设计一个模拟类
- 4.6 练习
- 4.6.1 惰性函数
- 4.6.2 fizz buzz问题生成器
- 4.6.3 重复访问
- 4.6.4 并行模拟
- 4.6.5 拼字游戏单词
- 总结
- 5 使用reduce进行累加操作
- 5.1 使用reduce函数进行N-X的转换
- 5.2 reduce函数的三个部分
- 5.2.1 reduce中的累加函数
- 5.2.2 使用lambda函数的简化累加
- 5.2.3 reduce函数中用于启动复杂行为的初始值
- 5.3 你熟悉的归约函数
- 5.3.1 使用reduce函数来模拟filter函数
- 5.3.2 使用reduce函数来模拟frequencies函数
- 5.4 同时使用map函数和reduce函数
- 5.5 使用reduce来分析汽车销售趋势
- 5.5.1 使用map函数来清洗汽车数据
- 5.5.2 使用reduce来计算汽车销售的总利润和总数量
- 5.5.3 对汽车数据应用map和reduce模式
- 5.6 加速map和reduce
- 5.7 练习
- 5.7.1 需要使用reduce的情况
- 5.7.2 lambda函数
- 5.7.3 最大的数字
- 5.7.4 按长度分组单词
- 总结
- 6 使用高级并行化来加速map和reduce
- 6.1 充分利用并行map
- 6.1.1 分块大小以及如何最大化地利用并行map
- 6.1.2 带有可变序列和分块大小的并行map运行时
- 6.1.3 更多的并行map:imap和starmap函数
- 6.2 解决并行map和reduce的悖论
- 6.2.1 用来更快进行归约的并行reduce
- 6.2.2 组合函数以及并行reduce工作流
- 6.2.3 使用fold实现并行求和、filter和frequencies
- 总结
- 第2部分
- 7 使用Hadoop和Spark处理真正的大型数据集
- 7.1 分布式计算
- 7.2 用于批处理的Hadoop
- 7.3 使用Hadoop找到高分单词
- 7.3.1 使用Python和Hadoop Streaming实现MapReduce作业
- 7.3.2 使用Hadoop Streaming对单词进行评分
- 7.4 用于交互式工作流的Spark
- 7.4.1 用Spark在内存中处理大型数据集
- 7.4.2 结合Python和Spark的PySpark
- 7.4.3 使用Spark SQL进行企业数据分析
- 7.4.4 用Spark DataFrame来处理列式数据
- 7.5 用Spark来记录单词得分
- 7.5.1 搭建Spark环境
- 7.5.2 通过spark-submit来运行MapReduce Spark作业
- 7.6 练习
- 7.6.1 Hadoop Streaming脚本
- 7.6.2 Spark接口
- 7.6.3 RDD
- 7.6.4 在多个步骤之间传递数据
- 总结
- 8 使用Apache Streaming和mrjob处理大数据的最佳实践
- 8.1 非结构化数据:日志和文档
- 8.2 使用Hadoop对网球球员进行分析
- 8.2.1 用来读取比赛数据的mapper函数
- 8.2.2 计算网球选手等级的reducer函数
- 8.3 通过mrjob工具,以Python的方式来使用HadoopStreaming
- 8.3.1 一个mrjob作业的Python结构
- 8.3.2 使用mrjob统计错误数量
- 8.4 使用mrjob来分析网球比赛
- 8.4.1 按场地类型统计塞雷娜的战绩
- 8.4.2 统计威廉姆斯姐妹之间的长期竞争
- 8.5 练习
- 8.5.1 Hadoop的数据格式
- 8.5.2 更多的Hadoop数据格式
- 8.5.3 Hadoop的原生编程语言
- 8.5.4 在MRJob中设计通用的模式
- 总结
- 9 在PySpark中使用map和reduce来实现PageRank算法
- 9.1 近距离了解PySpark
- 9.1.1 PySpark中类似于map函数的方法
- 9.1.2 PySpark中类似于reduce函数的方法
- 9.1.3 PySpark中的简便方法
- 9.2 在PySpark中使用Elo和PageRank算法对网球选手进行评分
- 9.2.1 使用PySpark重新实现Elo评分
- 9.2.2 介绍PageRank算法
- 9.2.3 用PageRank来计算网球选手的评分
- 9.3 练习
- 9.3.1 sumByKey
- 9.3.2 用toolz库来实现sumByKey
- 9.3.3 Spark和toolz库
- 9.3.4 维基百科的PageRank算法
- 总结
- 10 使用机器学习和PySpark进行更快的决策
- 10.1 什么是机器学习
- 10.1.1 机器学习是一种可以自我调节的判断型算法
- 10.1.2 机器学习的常见应用程序
- 10.2 机器学习基础与决策树分类器
- 10.2.1 设计决策树分类器
- 10.2.2 在PySpark中实现一个决策树
- 10.3 PySpark中的快速随机森林分类
- 10.3.1 理解随机森林分类器
- 10.3.2 实现一个随机森林分类器
- 总结
- 第3部分
- 11 使用Amazon Web Services和S3在云计算环境中处理大型数据集
- 11.1 AWS Simple Storage Service——针对大型数据集的解决方案
- 11.1.1 用S3实现无限的存储
- 11.1.2 云存储的可扩展性
- 11.1.3 方便的存储异构对象
- 11.1.4 用于管理大型数据集的管理服务
- 11.1.5 管理大型数据集的生命周期策略
- 11.2 使用S3在云中存储数据
- 11.2.1 通过浏览器来存储S3数据
- 11.2.2 使用Python和boto通过编程方式访问S3
- 11.3 练习
- 11.3.1 S3存储类型
- 11.3.2 S3存储区域
- 11.3.3 对象存储
- 总结
- 12 使用Amazon的Elastic MapReduce在云上实现MapReduce
- 12.1 在EMR上通过mrjob来运行Hadoop
- 12.1.1 用EMR方便地创建云计算集群
- 12.1.2 使用mrjob启动EMR集群
- 12.1.3 AWS的EMR浏览器界面
- 12.2 在EMR上使用Spark来进行机器学习
- 12.2.1 编写机器学习模型
- 12.2.2 为Spark搭建一个EMR集群
- 12.2.3 在集群中运行PySpark作业
- 12.3 练习
- 12.3.1 R系列集群
- 12.3.2 相关联的Hadoop工作
- 12.3.3 实例类型
- 总结
- 封底
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。