Python和PySpark数据分析
作者:乔纳森·里乌,殷海英
出版社:清华大学出版社
出版时间:2023-10-01
ISBN:9787302645368
定价:¥118.00
第1章 介绍 1
1.1 什么是PySpark 1
1.1.1 从头开始:什么是Spark 2
1.1.2 PySpark = Spark Python 3
1.1.3 为什么选择PySpark 3
1.2 PySpark的工作原理 5
1.2.1 使用集群管理器进行物理规划 6
1.2.2 懒惰的主管成就工厂的高效 8
1.3 你将从本书学到什么 11
1.4 我们将如何开始 12
1.5 本章小结 13
第Ⅰ部分 介绍:PySpark的第一步
第2章 使用PySpark编写的第一个数据处理程序 17
2.1 设置pyspark shell 18
2.1.1 SparkSession入口点 20
2.1.2 配置PySpark的日志级别 21
2.2 映射程序 22
2.3 采集和探索:为数据转换奠定基础 23
2.3.1 用spark.read将数据读入数据帧 24
2.3.2 从结构到内容:使用show()探索数据帧 27
2.4 简单的列转换:将句子拆解为单词列表 29
2.4.1 使用select()选择特定的列 30
2.4.2 转换列:将字符串拆分为单词列表 31
2.4.3 重命名列:alias和withColumnRenamed 33
2.4.4 重塑数据:将list分解成行 34
2.4.5 处理单词:更改大小写并删除标点符号 36
2.5 筛选记录 38
2.6 本章小结 40
2.7 扩展练习 40
第3章 提交并扩展你的第一个PySpark程序 43
3.1 对记录进行分组:计算词频 43
3.2 使用orderBy对结果排序 46
3.3 保存数据帧中的数据 48
3.4 整合所有内容:计数 49
3.4.1 使用PySpark的导入约定简化依赖 50
3.4.2 通过方法链简化程序 51
3.5 使用spark-submit以批处理模式启动程序 53
3.6 本章未涉及的内容 54
3.7 扩展词频程序 55
3.8 本章小结 56
3.9 扩展练习 57
第4章 使用pyspark.sql分析表格数据 59
4.1 什么是表格数据 60
4.2 使用PySpark分析和处理表格数据 62
4.3 在PySpark中读取和评估带分隔符的数据 63
4.3.1 第一次使用专门处理CSV文件的SparkReader 63
4.3.2 自定义SparkReader对象来读取CSV数据文件 65
4.3.3 探索数据世界的轮廓 67
4.4 数据操作基础:选择、删除、
重命名、排序及诊断 68
4.4.1 了解我们想要什么:选择列 69
4.4.2 只保留我们想要的:删除列 71
4.4.3 创建新列:使用withColumn()创建新列 73
4.4.4 整理数据帧:对列进行重命名和重排序 76
4.4.5 用describe()和summary()分析数据帧 78
4.5 本章小结 80
4.6 扩展练习 80
第5章 数据帧操作:连接和分组 83
5.1 连接数据 83
5.1.1 探索连接的世界 84
5.1.2 了解连接的两边 85
5.1.3 成功连接的规则:谓词 85
5.1.4 连接方法 87
5.1.5 连接的命名约定 91
5.2 通过groupby和GroupedData汇总数据 94
5.2.1 一个简单的分组蓝图 95
5.2.2 对自定义列使用agg() 98
5.3 处理null值:删除或填充 100
5.3.1 立即删除:使用dropna()
删除具有null值的记录 100
5.3.2 使用fillna()替换null值 101
5.4 问题回顾:端到端程序 102
5.5 本章小结 105
5.6 扩展练习 105
第Ⅱ部分 进级:将你的想法转化为代码
第6章 多维数据帧:使用PySpark处理JSON数据 109
6.1 读取JSON数据:为schemapocalypse做好准备 109
6.1.1 从小处开始:将JSON数据作为受限的Python字典 111
6.1.2 更进一步:在PySpark中读取JSON数据 113
6.2 用复杂的数据类型突破二维数据 114
6.2.1 当有多个值时:使用数组 116
6.2.2 映射类型:同一列中的键和值 119
6.3 结构体:列中的嵌套列 121
6.4 构建和使用数据帧模式 125
6.4.1 使用Spark类型作为schema的基本代码块 125
6.4.2 使用结构体模式原地读取JSON文档 127
6.4.3 循环往复:以JSON格式指定模式 131
6.5 进行整合:使用复杂数据类型减少重复数据 133
6.5.1 获取“刚刚好”的数据帧:explode和collect 135
6.5.2 创建自己的层次结构:作为函数的结构体 138
6.6 本章小结 139
6.7 扩展练习 139
第7章 双语PySpark:混合Python和SQL 141
7.1 根据我们的了解:pyspark.sql 与普通 SQL 142
7.2 为SQL准备数据帧 143
7.2.1 将数据帧转换为Spark表 144
7.2.2 使用Spark目录 145
7.3 SQL和PySpark 146
7.4 在数据帧方法中使用类似SQL的语法 148
7.4.1 获取所需的行和列:select和where 148
7.4.2 将相似的记录分组在一起:group by和order by 149
7.4.3 在分组后使用having进行筛选 150
7.4.4 使用CREATE关键字创建新表/视图 151
7.4.5 使用UNION和JOIN向表中添加数据 153
7.4.6 通过子查询和公共表表达式更好地组织SQL代码 154
7.4.7 PySpark与SQL语法的快速总结 157
7.5 简化代码:混合SQL和Python 157
7.5.1 使用Python提高弹性并简化数据读取阶段 158
7.5.2 在PySpark中使用SQL风格的表达式 159
7.6 结论 161
7.7 本章小结 161
7.8 扩展练习 162
第8章 使用Python扩展PySpark: RDD和UDF 165
8.1 PySpark中的RDD 166
8.2 使用Python通过UDF扩展PySpark 173
8.2.1 这一切都从简单的Python开始:使用类型化的Python函数 174
8.2.2 使用udf()将Python函数转换为UDF 176
8.3 本章小结 179
8.4 扩展练习 179
第9章 大数据就是大量的小数据:使用pandas UDF 181
9.1 通过pandas进行列转换:使用Series UDF 182
9.1.1 将Spark连接到谷歌的BigQuery 183
9.1.2 Series to Series UDF:使用pandas的列函数 188
9.1.3 标量UDF 冷启动=Series UDF的迭代器 190
9.2 分组数据上的UDF:聚合
与应用 193
9.2.1 分组聚合UDF 194
9.2.2 分组映射UDF 196
9.3 何时用,怎么用 198
9.4 本章小结 200
9.5 扩展练习 200
第10章 不同视角下的数据:窗口函数 203
10.1 学习并使用简单的窗口函数 204
10.1.1 确定每年最冷的一天 204
10.1.2 创建并使用一个简单的窗口函数来获取最冷的日子 206
10.1.3 比较两种方法 210
10.2 除了汇总:使用排名和分析功能 211
10.2.1 排名函数:看看谁是第一 212
10.2.2 分析函数:回顾过去和展望未来 216
10.3 弹性窗口!使用行和范围的边界 218
10.3.1 计数,窗口样式:静态、增长和无边界 219
10.3.2 范围和行 221
10.4 综合实践:在窗口中使用UDF 224
10.5 查看窗口:成功的窗口函数的主要步骤 226
10.6 本章小结 226
10.7 扩展练习 226
第11章 加速PySpark:理解Spark的查询计划 229
11.1 芝麻开门:通过Spark UI了解Spark环境 229
11.1.1 查看配置:Environment选项卡 231
11.1.2 Executors选项卡和resource management选项卡 233
11.1.3 了解任务的运行:通过Spark UI判断任务是否完成 237
11.1.4 通过Spark查询计划映射操作:SQL选项卡 240
11.1.5 Spark的核心:解析、分析、优化和物理计划 242
11.2 关于性能:操作和内存 246
11.2.1 宽操作与窄操作 246
11.2.2 缓存数据帧:功能强大,但往往致命(对于性能而言) 251
11.3 本章小结 254
第Ⅲ部分 使用PySpark进行机器学习
第12章 准备工作:为机器学习准备特征 259
12.1 阅读、探索和准备机器学习数据集 260
12.1.1 使用toDF()对列名进行标准化 261
12.1.2 探索数据并获取第一个特征列 262
12.1.3 解决数据错误并构建第一个特征集 264
12.1.4 删除无用记录并估算二分类特征 266
12.1.5 处理极值:清洗带有连续值的列 268
12.1.6 删除不常见的二分类列 271
12.2 特征创建和细化 272
12.2.1 创建自定义特征 272
12.2.2 去除高度相关的特征 273
12.3 基于转换器和估计器的特征准备 276
12.3.1 使用Imputer估计器填充连续特征 277
12.3.2 使用MinMaxScaler估计器对特征进行缩放 279
12.4 本章小结 281
第13章 通过机器学习管道增强机器学习 283
13.1 转换器和估计器: Spark
中机器学习的构建块 284
13.1.1 数据进出:转换器 285
13.1.2 估计器 289
13.2 构建(完整的)机器学习管道 290
13.2.1 使用向量列类型组装最终数据集 292
13.2.2 使用LogisticRegression分类器训练机器学习模型 295
13.3 评估和优化模型 297
13.3.1 评估模型准确率:混淆矩阵和评估器对象 298
13.3.2 真阳性与假阳性:ROC曲线 300
13.3.3 使用交叉验证优化超参数 302
13.4 从模型中获取最大的驱动力:提取系数 305
13.5 本章小结 307
第14章 构建自定义机器学习转换器和估计器 309
14.1 创建自己的转换器 309
14.1.1 设计转换器:从Param和转换的角度思考 310
14.1.2 创建转换器的Param 312
14.1.3 getter和setter:成为PySpark中优秀的一员 314
14.1.4 创建自定义转换器的初始化函数 316
14.1.5 创建转换函数 317
14.1.6 使用转换器 319
14.2 创建自己的估计器 321
14.2.1 设计估计器:从模型到Param 321
14.2.2 实现伴生模型:创建自己的Mixin 324
14.2.3 创建ExtremeValueCapper估计器 326
14.2.4 使用自定义估计器 328
14.3 在机器学习管道中使用转换器和估计器 328
14.3.1 处理多个输入 329
14.3.2 将自定义组件应用于机器学习管道 331
14.4 本章小结 334
14.5 结论:有数据,我就开心 334
附录A 习题答案 337
附录B 安装PySpark 369
附录C 一些有用的Python内容 389