书籍作者:[美] J.T.Wolohan | ISBN:9787121403682 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:8623 |
创建日期:2021-10-07 | 发布日期:2021-10-07 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书共分3部分,主要介绍如何使用Python语言来处理大型数据集。第1部分介绍map和reduce编程风格,以及Python中基础的map和reduce函数,并介绍如何将对象持久化,通过惰性函数和并行函数来加快大型数据集的处理速度。第2部分介绍Hadoop和Spark框架,以及如何使用mrjob库来编写Hadoop作业,如何实现PageRank算法,如何使用Spark来实现决策树和随机森林的机器学习模型。第3部分重点介绍云计算和云存储的基础知识,包括如何通过boto3的Python库将文件上传到AWS S3服务,以及如何在AWS的EMR集群中运行分布式的Hadoop和Spark作业。本书适合有一定Python编程基础,且希望掌握大型数据集处理能力的开发人员和数据科学家阅读。
J.T. Wolohan是Booz Allen Hamilton公司的一名高级人工智能和自然语言处理架构师。他教过各种层次的学生学习编程:从小学、初中学生到研究生、专业人士。除对分布式和并行计算感兴趣之外,J.T.还喜欢跑步、烹饪和与家人共度时光。
张若飞,曾任多家互联网金融公司CTO,在宜人贷、雅虎北研、金山云等知名公司担任架构师。十余年互联网研发及技术管理经验,对搭建海量数据、大型分布式系统有丰富经验。著有十余本技术译著,包括《Grails权威指南》《给大忙人看的JavaSE 8》《代码不朽:编写可维护软件的十大原则》《面向可伸缩架构》《云原生Java》《云原生模式》等书,总计400余万字。
有些编程技术在笔记本电脑可以存储的数据上运行良好,但是在面对大量文件或者分布式数据集时,可能会出现抓取速度变慢或者完全失败的情况。通过掌握强大的map和reduce范式,以及相应支持的Python工具,你可以编写出以数据为中心的应用程序,而无须在需求变化时重新编写整个代码。
本书将会教你如何编写可以处理任何大小数据集的代码。你将从笔记本电脑可以存储的数据集开始,然后学会如何把大型任务分解成可以同时运行的多个小任务,从而并行地进行数据分析。之后将同样的程序扩展到工业级规模的数据集,并且在一个云服务器集群上处理。在map和reduce范式的基础上,你将了解如何使用Hadoop和PySpark这样的工具来高效地处理海量的分布式数据集,如何使用机器学习来加速决策,以及如何用AWS S3来简化数据存储。
书中包括哪些内容:
√ 介绍什么是map和reduce范式
√ 如何通过multiprocessing模块和pathos框架来实现并行化数据处理
√ 如何运行Hadoop和Spark进行分布式计算
√ 如何提交AWS作业来处理大型数据集
译者序
在经历了二十余年互联网和移动互联网的发展之后,我们已经生活在一个大数据日益盛行的时代。数据早已不再是一台计算机、服务器可以存储下的,而需要成百上千台机器才能完成存储工作。数据规模也已经从以前的MB、GB级别,跨越到了TB、PB级别。并行化和分布式编程技能对开发人员的日常工作变得越来越重要,越来越多的开发人员正面临着因数据集太大而导致的问题。无论是社交、电商、短视频等如今日益流行的领域,还是人们的日常生活,都已经让我们越来越认识到大数据的价值。
在大数据的生态发展过程中,涌现了大量的新技术和框架,包括我们较为熟悉的Hadoop、Hive、Spark等,以及在大数据基础上再次发展起来的AI技术。应该说,这10年的技术发展浪潮都起源于我们可以开始处理以前无法想象的数据量。但是,无论新技术如何发展,底层的核心思想依然没有发生变化,那就是map和reduce的编程范式。如今以Hadoop为基石建立起来的大数据体系,正是map和reduce编程范式的体现。本书并没有介绍太多花哨的技术和框架,反而花费了大量篇幅讲解底层的map和reduce思想,再一步步拓展到如何用Python实现单机程序,如何用Hadoop、Spark等框架实现分布式计算,以及如何在云上的计算集群中处理更大规模的数据。这样的思路让人有“拨开迷雾,返璞归真”之感。
本书适合有一定Python编程基础,且希望掌握大型数据集处理能力的开发人员和数据科学家阅读。
感谢家人、朋友、同事一直以来对我的鼓励和支持。本译著难免会存在一些纰漏,恳请读者谅解并指出。
前言
我是在 2018 年夏天想到写这本书的。当时我和一些才华横溢的开发人员一起工作,他们在职业生涯的大部分时间里都没有学习过如何编写可伸缩的代码。我意识到,很多 “大数据”的技术,或者我们在本书中称为 “大数据集”问题的技术,都是专门为那些想要解决这些问题的人准备的。因为企业中存在很多这样的问题,而且在这种规模下产生数据的机制已经相对成熟,所以关于这个主题的书籍往往是用作为工具的企业语言(比如 Java 语言)编写的。
这本书有一些不同。我注意到越来越多的大数据集问题正在通过分布式的方式处理。这里的分布式不是指分布式计算——当然也不是指员工会分散在各地来完成这些工作。个人开发者或者小型开发团队,通常在快速的原型环境中,或者使用快速开发语言(比如 Python)来处理大数据集。
我希望这本书能够将可伸缩和分布式编程技术带给更广泛的开发人员。我们生活在一个大数据日益盛行的时代。并行化和分布式编程技能对开发人员的日常工作变得越来越重要。越来越多的程序员正面临由于数据集太大而导致的问题。我希望通过这本书,开发人员能够掌握解决这些大数据问题的工具,并将重点放在那些让他们首先对编程感兴趣的问题上。
谁应该阅读本书
本书的目标是向读者传授一种可伸缩的编程风格。为了做到这一点,我们将涉及一些你可能不熟悉的编程或技术书籍。其他书籍可能只会介绍某一个函数库,而本书则会涉及许多函数库——既有内置的模块,比如 functools 和 itertools,也有第三方库,比如 toolz、pathos 和 mrjob。其他的书籍可能只会涉及某一项技术,而这本书会涉及很多技术,包括 Hadoop、Spark 和 Amazon Web Services (AWS)。我们选择覆盖更广泛的技术是为了承认这样一个事实 :为了让代码具有可伸缩性,你需要能够适应新的情况。然而,在所有这些技术中,我会强调 Python 中一种 “map和reduce”的编程风格。
你会发现,在不断变化的环境中,这种代码风格能够保持始终如一,这也是我最初采用它的原因。你可以使用它来快速调整代码以适应新的情况。最终,本书的目的是教你如何通过映射和归约的风格来扩展代码。在这个过程中,我还打算教你使用一些大数据的工具,比如 Spark、Hadoop 和 AWS。
这本书是为开发人员或者数据科学家所编写的,因为他们知道自己正面临数据量太大的问题。如果你知道如何解决自己的问题,但却不能足够快地处理大规模的数据,那么本书就是为你准备的。如果你对Hadoop和Spark感兴趣,本书会很适合你。
如果你正在寻找一些关于如何将在云端处理大数据的方法,那么本书可能会帮到你。
本书是如何组织的:路线图
在第 1 章中,我将介绍 map 和 reduce 的编程风格,以及我将在本书中讨论的内容。我将讨论并行编程的好处、分布式计算的基础知识、用于并行和分布式计算的工具以及云计算。我还为在本书中所涉及的材料提供了一个概念模型。
在第 2 章中,我将介绍 map 和 reduce 风格中的 map 部分,并讨论如何并行化一个问题,以便更快地解决它。我将介绍 Python 的对象持久化过程,即 Python 如何在并行化期间共享数据,以及我们将通过一个示例来演示如何使用并行化来加速Web 抓取。
在第 3 章中,我们将使用 map 函数来执行复杂的数据转换。在本章中,我将教你如何将小的功能拼接到一起,形成函数管道或者函数链,从而产生巨大的效果。我还将演示如何并行化这些函数链,以便在大数据集上更快地解决问题。
在第 4 章中,我将介绍惰性(laziness)的概念,以及如何利用惰性来加速大数据工作流的处理速度。我将展示如何用惰性函数在本地来处理大数据集问题,如何创建自己的惰性函数,以及如何最佳地结合使用惰性和非惰性的编程方式。我们将使用这些惰性方法来解决一个模拟问题。
在第 5 章中,我将讨论如何使用 reduce 函数进行累加转换。我还会教你如何使用匿名或者 lambda 函数。在本章中,我们将使用 reduce 函数来计算大数据集的汇总统计信息。
在第 6 章中,我将介绍使用 map 和 reduce 的高级并行化技术。你将学习 Python中用于并行化的高级函数,以及如何、何时寻求问题的并行解决方案。在本章中,你还将学习如何实现并行的 reduce 工作流。
在第 7 章,我将介绍分布式计算的基础以及 Hadoop 和 Spark 等技术。你将使用 Hadoop 和 Spark 来编写一个入门程序,并了解每种框架的优点。我们还将讨论Hadoop 优于 Spark 和 Spark 优于 Hadoop 的情况。
在第 8 章中,我将介绍如何使用 Hadoop 在分布式集群上流式运行 map 和 reduce 风格的代码。我还将介绍一个用 Python 来编写 Hadoop 作业的 mrjob 库。我们将介绍如何在 Hadoop 的多个作业步骤之间移动复杂的数据类型。我们将通过分析 Web 流量数据和网球比赛日志的示例来巩固对这些原则的理解。
在第 9 章中,我们将深入讨论如何使用 Spark 来让 Python 代码分布式化。我将介绍 Spark 的 RDD 数据结构,以及如何使用 RDD 的方法来实现 map 和 reduce 的编程风格。我们还将对第 8 章中的网球比赛日志数据实现经典的 PageRank 算法。
在第 10 章中,我们将讨论 Spark 最流行的应用之一:并行机器学习。在本章中,我们将介绍机器学习的一些基础知识。我们将通过实现决策树和决策森林来实践这些原则,从而预测一堆蘑菇是否有毒。
在第 11 章中,我将介绍云计算的基础知识和云存储的本质。我们将通过使用Web GUI 和基于 Python 的 AWS API 包装库——boto3,将数据加载到 Amazon S3,从而将我们的学习付诸实践。
在第 12 章中,我们将使用 Amazon ElasticMapReduce 在云中运行分布式的Hadoop 和 Spark 作业。你将了解如何使用 mrjob 从控制台和基于 AWS 浏览器的GUI 来搭建一个弹性的 Hadoop 集群。一旦你掌握了本章的知识内容,就可以处理任何大小的数据集。
第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的方式来使用Hadoop Streaming
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 实例类型
总结
新书,居然5折封顶,不错,持续关注中。
2021-03-09 16:27:25