本书通俗地讲解数据科学与并行计算的基本概念、方法和原理,系统地介绍基于典型大数据场景的并行计算解决思路,同时涵盖常用的数据并行计算工具的操作实践,使读者知其然更知其所以然。
本书的特色在于:注重对大数据科学方法核心应用的讲解,突出以并行计算思维解决大数据场景问题的案例教学。基于典型大数据场景案例数据集,循序渐进地引导读者利用Parallel、Sparklyr、Dask和PySpark等主流并行计算工具实现数据的清洗、转换、描述和建模分析。帮助读者系统全面地构建数据科学的基本知识体系,领会数据并行计算方法的精髓,掌握不同编程语言和并行计算工具针对不同规模数据集的优缺点,能够利用并行计算工具解决实际的数据分析问题。
白琰冰,中国人民大学统计学院数据科学与大数据统计系讲师,硕士生导师,中国人民大学杰出青年学者,北京大数据协会理事会理事。主要开设课程包括大数据分布式计算、并行计算与软件设计、统计学。
第一部分 数据科学并行计算基础
第1 章 并行计算基础知识
1.1 什么是并行计算
1.2 并行计算的起源
1.2.1 为什么要进行并行计算
1.2.2 如何解决大规模数据对计算能力的需求问题
1.3 有关并行计算的基本概念
1.3.1 并发计算、分布式计算的概念
1.3.2 核、集群、中央处理器的概念
1.3.3 集群计算、对等计算、网格计算、云计算和普适计算的概念
1.3.4 并行计算中的常用术语
1.4 并行计算的性能评价方法
1.5 并行计算的数据分解方法及计算模型
1.5.1 分解问题为独立块
1.5.2 并行计算模型
习题
第2 章 大数据基础知识
2.1 大数据简介
2.1.1 什么是大数据
2.1.2 大数据的3 个V
2.1.3 大数据相关概念和术语
2.1.4 大数据处理系统
2.1.5 Spark 框架的特性
2.1.6 Spark 生态
2.1.7 Spark 部署方式
2.2 Hadoop 和Spark 基础知识
2.2.1 什么是Hadoop
2.2.2 Spark 产生的背景
2.2.3 Spark 的优点
2.2.4 Spark 的三大概念
2.2.5 为什么要选择Spark
2.3 在阿里云服务器安装和配置Hadoop 和Spark
2.3.1 Hadoop 的安装和配置
2.3.2 Spark 的安装和配置
2.4 Linux 基础知识
2.4.1 Linux Shell 介绍
2.4.2 Linux 常用目录介绍
2.4.3 Linux 常用命令
2.4.4 vim 基本操作
习题
第二部分 R 语言并行计算
第3 章 R 语言并行计算核心方法
3.1 并行计算的R 包
3.2 parallel 包并行计算
3.2.1 parallel 包的基础知识
3.2.2 parallel 包的核心功能
3.2.3 初始化节点
3.2.4 数据分块
3.3 foreach 包和future 包并行计算
3.3.1 foreach 包
3.3.2 foreach 包和parallel 包的后端
3.3.3 future 包和future.apply 包
3.3.4 调度和负载平衡
3.4 随机数和结果可重复性
3.4.1 结果是可重复的吗
3.4.2 并行计算中的RNG
3.4.3 foreach 包和future.apply 包中的结果可重复性
3.4.4 小结
习题
第4 章 使用R 中的sparklyr 包操作
4.1 sparklyr 基础知识
4.1.1 什么是sparklyr
4.1.2 sparklyr 的安装与工作流程
4.2 Spark 中的数据
4.2.1 向Spark 传输数据
4.2.2 tibble 与Data Frame
4.2.3 展示Spark 中的数据集
4.2.4 compute() 与collect()
4.3 sparklyr 的dplyr 接口
4.3.1 dplyr 接口简介
4.3.2 选择目标列
4.3.3 筛选行
4.3.4 对行排序
4.3.5 转换或添加列
4.3.6 计算汇总函数
4.3.7 其他常用功能
4.4 sparklyr 的特征转换接口
4.4.1 dplyr 接口的局限
4.4.2 MLib 接口
4.4.3 Spark DataFrame 接口
4.5 案例:使用MLib 接口进行机器学习
4.5.1 MLib 中的机器学习函数
4.5.2 机器学习案例
习题
第5 章 R 中的可扩展数据处理
5.1 R 中的可扩展数据处理简介
5.1.1 什么是可伸缩的数据处理
5.1.2 使用bigmemory 项目处理“核外”对象
5.1.3 big.matrix 的复制
5.2 使用大内存处理和分析数据
5.2.1 bigmemory 软件包套件
5.2.2 拆分、计算和合并
5.2.3 使用Tidyverse 可视化结果
5.2.4 bigmemory 的局限性
5.3 使用iotools 处理大型文件
5.3.1 数据的分块处理
5.3.2 初识iotools: 导入数据
5.3.3 chunk.apply 的巧妙运用
5.4 案例:抵押贷款数据的基础分析
5.4.1 不同人种的抵押贷款的数量
5.4.2 数据缺失与其他变量的关系
5.4.3 不同人种贷款数量的变化趋势
5.4.4 乡村与城镇的贷款变化趋势
5.4.5 收入与联邦担保贷款
5.4.6 小结
习题
第三部分 Python 语言并行计算
第6 章 使用Python 进行Dask并行编程
6.1 Dask 基础知识
6.1.1 Dask 简介
6.1.2 Dask 的主要优点
6.1.3 安装Dask
6.2 Dask 对不同数据结构的操作
6.2.1 Dask 对Array 的操作
6.2.2 Dask 对DataFrame 的操作
6.2.3 Dask 对Bag 的操作
6.3 在大数据集上训练
6.3.1 安装Python 包
6.3.2 导入包
6.3.3 创建随机数据集
6.3.4 生成数据集
6.3.5 K-means 计算
6.3.6 使用Dask 可视化示例
6.4 并行及分布式机器学习
6.4.1 生成随机数据
6.4.2 支持向量机
6.5 分布式部署示例
6.5.1 Dask 分布式简介
6.5.2 启动主节点
6.5.3 启动工作节点
6.5.4 运行Dask 分布式示例
习题
第7 章 PySpark 基础操作
7.1 PySpark 简介
7.1.1 PySpark 相关概念
7.1.2 PySpark 初步操作
7.1.3 Python 中的匿名函数
7.2 PySpark RDD 相关编程
7.2.1 什么是RDD
7.2.2 创建RDD 的方法
7.2.3 RDD 的转换操作
7.2.4 RDD 的执行操作
7.2.5 创建RDD 对的方法
7.2.6 RDD 对的执行操作
7.3 PySpark 的DataFrame
7.3.1 PySpark 数据流简介
7.3.2 SparkSession——DataFrame API 的入口点
7.3.3 在PySpark 中创建数据流
7.3.4 DataFrame 的转换操作
7.3.5 DataFrame 的执行操作
7.3.6 有条件的DataFrame转换操作
7.3.7 在DataFrame 中实现用户自定义函数
7.3.8 与ArrayType 列进行交互
7.4 提升DataFrame 操作的性能
7.4.1 提高数据导入的性能
7.4.2 集群尺寸建议
7.4.3 查看Spark 执行计划
7.4.4 限制shuffling
7.5 在PySpark 中使用SQL 查询
7.5.1 DataFrame API vs. SQL查询
7.5.2 执行SQL 语句
7.5.3 DataFrame 连接操作
7.6 案例:房屋售价探索性分析
7.6.1 读入并检查数据
7.6.2 房屋售价的描述统计量
7.6.3 使用可视化方式查看数据
习题
第8 章 PySpark 特征工程
8.1 数据科学思维简介
8.2 数据清洗
8.2.1 什么是数据清洗
8.2.2 使用Spark 进行数据清洗的优势
8.2.3 使用Spark Schema 验证数据集
8.2.4 使用数据管道进行转换操作
8.2.5 验证数据的质量
8.2.6 使用数据框进行分析
8.3 单特征预处理
8.3.1 数据标准化
8.3.2 缺失值处理
8.3.3 提取日期特征
8.3.4 二值化和桶化
8.3.5 OneHot 编码
8.4 多特征预处理
8.4.1 特征生成
8.4.2 特征提取
8.4.3 文本数据特征提取
8.5 案例:航班数据预处理
8.5.1 读取数据
8.5.2 删除飞机编号字段
8.5.3 删除delay 字段的缺失值
8.5.4 创建衍生字段
8.5.5 将输入字段合并为一个向量
8.5.6 对航空公司字段进行OneHot编码
习题
第9 章 PySpark 机器学习
9.1 机器学习与Spark
9.2 使用Spark ML 中的分类模型
9.2.1 数据集划分
9.2.2 决策树
9.2.3 逻辑回归
9.2.4 分类模型评价
9.2.5 使用集成模型进行分类
9.3 使用Spark ML 中的回归模型
9.3.1 线性回归模型
9.3.2 随机森林回归
9.3.3 回归模型评价
9.3.4 通过离散化改进模型性能
9.3.5 使用正则化方法防止过拟合
9.4 使用Spark MLlib 进行机器学习
9.4.1 PySpark MLlib 概述
9.4.2 协同过滤
9.4.3 分类
9.4.4 聚类
9.5 模型选择
9.5.1 管道
9.5.2 交叉验证
9.5.3 网格寻优
习题