清华大学出版社出版,基于Spark 3.1.2,面向入门小白的Spark系统教程和案例图书。
-
第1章 Spark架构原理与集群搭建 11
- 1.1 Spark简介 12
- 1.2 Spark技术栈 14
- 1.2.1 Spark Core 14
- 1.2.2 Spark SQL 15
- 1.2.3 Spark streaming和Structured Streaming 15
- 1.2.4 Spark MLlib 16
- 1.2.5 Spark GraphX 16
- 1.2.6 SparkR 16
- 1.3 Spark架构原理 17
- 1.3.1 Spark集群和资源管理系统 17
- 1.3.2 Spark应用程序 18
- 1.3.3 Spark Driver和Executor 19
- 1.4 Spark程序部署模式 20
- 1.5 安装和配置Spark集群 20
- 1.5.1 安装Spark 21
- 1.5.2 了解Spark目录结构 21
- 1.5.3 配置Spark集群 22
- 1.5.4 验证Spark安装 23
- 1.6 配置Spark历史服务器 24
- 1.6.1 历史服务器配置 25
- 1.6.2 启动Spark历史服务器 26
- 1.7 使用spark-shell进行交互式分析 27
- 1.7.1 运行模式--master 27
- 1.7.2 启动和退出spark-shell 27
- 1.7.3 spark-shell常用命令 29
- 1.7.4 SparkContext和SparkSession 30
- 1.7.5 Spark Web UI 31
- 1.8 使用spark-submit提交Spark应用程序 33
- 1.8.1 spark-submit指令的各种参数说明 33
- 1.8.2 提交SparkPi程序,计算圆周率π值 37
- 1.8.3 提交SparkPi程序到YARN集群上执行 37
-
第2章 开发和部署Spark应用程序 40
- 2.1使用IntelliJ IDEA开发Spark SBT应用程序 40
- 2.1.1 安装IntelliJ IDEA 40
- 2.1.2 配置IntelliJ IDEA Scala环境 44
- 2.1.3 创建IntelliJ IDEA SBT项目 46
- 2.1.4 配置SBT构建文件 49
- 2.1.5 准备数据文件 49
- 2.1.6 创建Spark应用程序 50
- 2.1.7 部署分布式Spark应用程序 54
- 2.1.8 远程调试Spark程序 55
- 2.2使用IntelliJ IDEA开发Spark Maven应用程序 58
- 2.2.1 创建IntelliJ IDEA Maven项目 58
- 2.2.2 验证SDK安装和配置 60
- 2.2.3 项目依赖和配置管理 63
- 2.2.4 测试Spark程序 65
- 2.2.5 项目编译和打包 66
- 2.3使用Java开发Spark应用程序 66
- 2.3.1 创建一个新的IntelliJ项目 66
- 2.3.2 验证SDK安装和配置 69
- 2.3.3 安装和配置Maven 71
- 2.3.4 创建Spark应用程序 72
- 2.3.5 部署Spark应用程序 73
- 2.3.6 远程调试Spark应用程序 75
- 2.4使用Zeppelin进行交互式分析 77
- 2.4.1 下载Zeppelin安装包 78
- 2.4.2 安装和配置Zeppelin 78
- 2.4.3 配置Spark解释器 79
- 2.4.4 创建和执行Notebook程序 80
-
第3章 Spark核心编程 83
- 3.1理解数据抽象RDD 83
- 3.1.1 RDD结构 83
- 3.1.2 RDD容错 84
- 3.2 RDD编程模型 84
- 3.2.1 单词计数应用程序 85
- 3.2.2 理解SparkSession 87
- 3.2.3 理解SparkContext 88
- 3.3 创建RDD 88
- 3.3.1 将现有的集合并行化以创建RDD 89
- 3.3.2 从存储系统读取数据集以创建RDD 89
- 3.3.3 从已有的RDD转换得到新的RDD 90
- 3.3.4 创建RDD时指定分区数量 90
- 3.4 操作RDD 91
- 3.4.1 RDD上的Transformation和Action 91
- 3.4.2 RDD Transformation操作 93
- 3.4.3 RDD Action操作 99
- 3.4.4 RDD上的描述性统计操作 101
- 3.5 Pair RDD 103
- 3.5.1 创建Pair RDD 103
- 3.5.2 操作Pair RDD 104
- 3.5.3 关于reduceByKey()操作 107
- 3.5.4 关于aggregateByKey()操作 109
- 3.5.5 关于combineByKey()操作 112
- 3.6 持久化RDD 114
- 3.6.1 缓存RDD 115
- 3.6.2 RDD缓存策略 117
- 3.6.3 检查点RDD 117
- 3.7 RDD数据分区 118
- 3.7.1 获取和指定RDD分区数 118
- 3.7.2 调整RDD分区数 120
- 3.7.3 内置数据分区器 121
- 3.7.4 自定义数据分区器 123
- 3.7.5 避免不必要的shuffling 124
- 3.7.6 基于数据分区的操作 126
- 3.8 深入理解RDD执行过程 129
- 3.8.1 Spark RDD调度过程 129
- 3.8.2 Spark执行模型 130
- 3.9 Spark资源管理 134
- 3.9.1 CPU资源分配策略 134
- 3.9.2 Spark内存管理 135
- 3.10 使用共享变量 137
- 3.10.1 广播变量 137
- 3.10.2 累加器 142
- 3.11 Spark RDD编程案例 145
- 3.11.1 合并小文件 145
- 3.11.2 二次排序实现 147
- 3.11.3 Top N实现 148
- 3.11.4 酒店数据预处理 152
-
第4章 Spark SQL 156
- 4.1 Spark SQL数据抽象 156
- 4.2 Spark SQL架构组成 158
- 4.3 Spark SQL编程模型 159
- 4.4 程序入口SparkSession 161
- 4.5 Spark SQL支持的数据类型 163
- 4.5.1 Spark SQL基本数据类型 163
- 4.5.2 Spark SQL复杂数据类型 163
- 4.5.3 模式-Schema 164
- 4.5.4 列对象和行对象 164
- 4.6 创建DataFrame 165
- 4.6.1 简单创建单列和多列DataFrame 166
- 4.6.2 从RDD创建DataFrame 168
- 4.6.3 读取外部数据源创建DataFrame 172
- 4.7 操作DataFrame 189
- 4.7.1 列的多种引用方式 190
- 4.7.2 对DataFrame执行Transformation转换操作 191
- 4.7.3 对DataFrame执行Action操作 202
- 4.7.4 对DataFrame执行描述性统计操作 203
- 4.7.5 取DataFrame Row中特定字段 206
- 4.7.6 操作DataFrame示例 207
- 4.8 存储DataFrame 208
- 4.8.1 写出DataFrame 209
- 4.8.2 存储模式 211
- 4.8.3 控制DataFrame的输出文件数量 212
- 4.8.4 控制DataFrame实现分区存储 215
- 4.9 使用类型化的Dataset 216
- 4.9.1 了解Dataset 217
- 4.9.2 创建Dataset 218
- 4.9.3 操作Dataset 224
- 4.9.4 类型安全检查 238
- 4.9.5 编码器 240
- 4.10 临时视图与SQL查询 243
- 4.10.1 在Spark程序中执行SQL语句 243
- 4.10.2 注册临时视图并执行SQL查询 244
- 4.10.3 使用全局临时视图 246
- 4.10.4 直接使用数据源注册临时视图 247
- 4.10.5 查看和管理表目录 248
- 4.11 缓存DataFrame/Dataset 249
- 4.11.1 缓存方法 250
- 4.11.2 缓存策略 251
- 4.11.3 缓存表 251
- 4.11.4 缓存还是不缓存 252
- 4.12 Spark SQL编程案例 254
- 4.12.1 实现单词计数 254
- 4.12.2 用户数据集分析 255
- 4.12.3 电商用户评论数据集分析 259
- 4.12.4 航空公司航班数据集分析 260
- 4.12.5 数据增量抽取和全量抽取 268
-
第5章 Spark SQL(高级) 270
- 5.1 Spark SQL函数 270
- 5.2 内置标量函数 270
- 5.2.1 日期时间函数 270
- 5.2.2 字符串函数 274
- 5.2.3 数学计算函数 277
- 5.2.4 集合元素处理函数 278
- 5.2.5 其他函数 281
- 5.2.6 函数应用示例 284
- 5.2.7 Spark 3数组函数 286
- 5.3 聚合与透视函数 293
- 5.3.1 聚合函数 293
- 5.3.2 分组聚合 299
- 5.3.3 数据透视 302
- 5.3.4 谓词子查询 303
- 5.4 高级分析函数 304
- 5.4.1 使用多维聚合函数 304
- 5.4.2 使用时间窗口聚合 307
- 5.4.3 使用窗口分析函数 311
- 5.5 用户自定义函数(UDF) 319
- 5.6 数据集的join连接 321
- 5.6.1 join表达式和join类型 321
- 5.6.2 执行join连接 322
- 5.6.3 处理重复列名 329
- 5.6.4 join连接策略 331
- 5.7 读写Hive表 333
- 5.7.1 Spark SQL的Hive配置 333
- 5.7.2 Spark Maven项目的Hive配置 334
- 5.7.3 Spark SQL读写Hive表 335
- 5.7.4 分桶、分区和排序 340
- 5.8 查询优化器Catalyst 346
- 5.8.1 窄转换和宽转换 347
- 5.8.2 Spark执行模型 347
- 5.8.3 Catalyst实践 349
- 5.8.4 可视化Spark程序执行 352
- 5.9 项目Tungsten 359
- 5.10 Spark性能调优 360
- 5.11 Spark SQL编程案例 362
- 5.11.1 电影数据集分析 362
- 5.11.2 电商数据集分析 366
- 5.12 Spark SQL分析案例 373
- 5.12.1 用户行为数据集说明 373
- 5.12.2 分析需求说明 374
- 5.12.3 数据探索和预处理 375
- 5.12.4 平台流量分析 380
- 5.12.5 用户行为分析 382
- 5.12.6 转化漏斗分析 389
- 5.12.7 用户RFM价值分析 392
- 5.12.8 推荐效果分析 395
- 5.12.9 项目分析总结 400
-
第6章 Spark Streaming流处理 401
- 6.1 Spark DStream 401
- 6.2 Spark流处理示例 402
- 6.2.1 Spark Streaming编程模型 402
- 6.2.2 实时股票交易分析 405
- 6.2.3 使用外部数据源Kafka 421
-
第7章 Spark结构化流 426
- 7.1结构化流简介 426
- 7.2结构化流编程模型 428
- 7.3结构化流核心概念 430
- 7.3.1 数据源 430
- 7.3.2 输出模式 431
- 7.3.3 触发器类型 432
- 7.3.4 数据接收器 432
- 7.3.5 水印 433
- 7.4使用各种流数据源 433
- 7.4.1 使用Socket数据源 433
- 7.4.2 使用Rate数据源 434
- 7.4.3 使用File数据源 436
- 7.4.4 使用Kafka数据源 439
- 7.5流DataFrame操作 445
- 7.5.1 选择、投影和聚合操作 445
- 7.5.2 执行join连接操作 448
- 7.6使用数据接收器 451
- 7.6.1 使得File Data Sink 451
- 7.6.2 使用Kafka Data Sink 452
- 7.6.3 使用Foreach Data Sink 454
- 7.6.4 使用Console Data Sink 457
- 7.6.5 使用Memory Data Sink 458
- 7.6.6 Data Sink与输出模式 458
- 7.7深入研究输出模式 459
- 7.7.1 无状态流查询 459
- 7.7.2 有状态流查询 460
- 7.8深入研究触发器 464
- 7.8.1 固定间隔触发器 465
- 7.8.2 一次性的触发器 466
- 7.8.3 连续性的触发器 467
-
第8章 Spark结构化流(高级) 470
- 8.1事件时间和窗口聚合 470
- 8.1.1 固定窗口聚合 470
- 8.1.2 滑动窗口聚合 473
- 8.2水印 477
- 8.2.1 限制维护的聚合状态数量 477
- 8.2.2 处理迟到的数据 480
- 8.3任意状态处理 485
- 8.3.1 结构化流的任意状态处理 485
- 8.3.2 处理状态超时 486
- 8.3.3 任意状态处理实战 487
- 8.4处理重复数据 496
- 8.5容错 498
- 8.6流查询度量指标 499
- 8.6.1 流查询指标 499
- 8.6.2 流监控指标 501
- 8.7结构化流案例:运输公司车辆超速实时监测 502
- 8.8结构化流案例:实时订单分析 507
- 8.8.1 数据集说明和数据源 507
- 8.8.2 计算每10秒钟的销售和购买订单数量 508
- 8.8.3 根据购买或售出的总金额来统计前5个客户 511
- 8.8.4 找出过去一个小时内前5个交易量最多的股票 513
-
第9章 Spark图处理库GraphFrames 516
- 9.1图基本概念 516
- 9.2 GraphFrames图处理库简介 518
- 9.3 GraphFrames的基本使用 519
- 9.3.1 添加GraphFrames依赖 519
- 9.3.2 构造图模型 520
- 9.3.3 简单图查询 521
- 9.3.4 示例:简单航班数据分析 525
- 9.4应用motif模式查询 528
- 9.4.1 简单motif查询 529
- 9.4.2 状态查询 531
- 9.5构建子图 533
- 9.6内置图算法 534
- 9.6.1 广度优先搜索(BFS)算法 535
- 9.6.2 连通分量算法 536
- 9.6.3 强连通分量算法 537
- 9.6.4 标签传播算法 538
- 9.6.5 PageRank算法 539
- 9.6.6 最短路径算法 542
- 9.6.7 三角计数算法 543
- 9.7保存和加载GraphFrame 544
- 9.8深入理解GraphFrame 545
- 9.9案例:亚马逊产品联购分析 546
- 9.9.1 基本图查询和操作 547
- 9.9.2 联购商品分析 548
- 9.9.3 处理子图 552
- 9.9.4 应用图算法进行分析 553
-
第10章 Delta Lake数据湖 555
- 10.1从数据仓库到数据湖 555
- 10.2解耦存储层和分析层 556
- 10.3 Delta Lake介绍 559
- 10.4 Delta Lake架构 561
- 10.5 Delta Lake使用 563
- 10.5.1 安装Delta Lake 563
- 10.5.2 表批处理读写 564
- 10.5.3 表流处理读写 570
- 10.5.4 文件移除 573
- 10.5.5 压缩小文件 579
- 10.5.6 增量更新与时间旅行 582
- 10.5.7 合并更新(upsert) 587
-
第11章 Iceberg数据湖 595
- 11.1 Apache Iceberg简介 595
- 11.2 配置和使用Catalog 596
- 11.2.1 配置Catalog 596
- 11.2.2 使用Catalog 598
- 11.2.3 替换Session Catalog 598
- 11.2.4 运行时配置 598
- 11.3 管理Catalog中的数据库 599
- 11.4 管理Iceberg表 600
- 11.4.1 基本的CRUD操作 600
- 11.4.2 创建和删除表 604
- 11.4.3 使用分区表和分桶表 606
- 11.4.4 数据覆盖 615
- 11.4.5 修改表结构 617
- 11.5 探索Iceberg表 625
- 11.5.1 History历史表 625
- 11.5.2 Snapshots快照表 626
- 11.5.3 Files数据文件表 626
- 11.5.4 Manifests文件清单表 627
- 11.6 Apache Iceberg架构 627
- 11.6.1 Iceberg Catalog 628
- 11.6.2 元数据文件 629
- 11.6.3 清单列表(manifest list) 632
- 11.6.4 清单文件(manifest file) 634
- 11.7 CRUD操作的底层实现 636
- 11.8 增量更新与合并更新 639
- 11.9 时间旅行 645
- 11.10 隐藏分区和分区演变 647
- 11.10.1 分区概念 647
- 11.10.2 分区演变示例 650
- 11.11 使用存储过程维护表 656
- 11.12 整合Spark结构化流 659
- 11.12.1 流读取 659
- 11.12.2 流写入 660
- 11.12.3 维护流表 662
-
第12章 Hudi数据湖 665
- 12.1 Apache Hudi特性 665
- 12.1.1 Hudi Timeline 665
- 12.1.2 Hudi文件布局 666
- 12.1.3 Hudi表类型 667
- 12.1.4 Hudi查询类型 669
- 12.2 在Spark 3中使用Hudi 670
- 12.2.1 配置Hudi 670
- 12.2.2 初始设置 671
- 12.2.3 插入数据 672
- 12.2.4 查询数据 674
- 12.2.5 更新数据 675
- 12.2.6 增量查询 676
- 12.2.7 时间点查询 677
- 12.2.8 删除数据 678
- 12.2.9 插入覆盖 680
-
第13章 Spark大数据处理综合案例 682
- 13.1 项目需求说明 682
- 13.2 项目架构设计 682
- 13.3 项目实现-数据采集 683
- 13.4 项目实现-数据集成 687
- 13.4.1 Flume简介 687
- 13.4.2安装和配置Flume 687
- 13.4.3实现数据集成 688
- 13.5 项目实现-数据ELT 689
- 13.6 项目实现-数据清洗与整理 692
- 13.7 项目实现-数据分析 696
- 13.8 项目实现-分析结果导出 703
- 13.9 项目实现-数据可视化 704
- 13.9.1 Spring MVC框架简介 704
- 13.9.2 ECharts图表库介绍 705
- 13.9.3 Spring MVC Web程序开发 707
- 13.9.4前端Echarts组件开发 718
- 13.10 项目部署和测试 722
本书系统讲述Apache Spark大数据计算平台的原理,以及如果将Apache Spark应用于大数据的实时流处理、批处理、图计算等各个场景。通过原理深入学习和实践示例、案例的学习应用,使读者了解并掌握Apache Spark大数据计算平台的基本原理和技能,接近理论与实践的距离。
全书共分为13章,主要内容包括:Spark架构原理与集群搭建、开发和部署Spark应用程序、Spark核心编程、Spark SQL、Spark SQL高级分析、Spark Streaming流处理、Spark结构化流、Spark结构化流高级处理、下一代Spark图处理库GraphFrames、下一代大数据技术(Delta Lake数据湖、Iceberg数据湖和Hudi数据湖)、Spark大数据处理综合案例。本书源码全部在Apache Spark 3.1.2上调试成功,所有示例和案例均基于Scala语言。
为降低读者学习大数据技术的门槛,本书除了提供了丰富的上机实践操作和范例程序详解之外,本书作者(联系邮箱:zz_kapper@163.com)还为购买和使用本书的读者提供了搭建好的Hadoop、Hive数仓和Spark大数据开发和学习环境(PBLP平台,可到小白学苑网站下载 - http://www.xueai8.com)。读者既可以参照本书的讲解自行搭建Hadoop和Spark环境,也可直接使用作者提供的开始和学习环境,快速开始大数据和Spark、数据湖的学习。
本书系统讲解了Apache Spark大数据计算平台的原理和流、批处理的开发实践,内容全面、实例丰富、可操作性强,做到了理论与实践相结合。本书适合大数据学习爱好者、想要入门Apache Spark的读者作为入门和提高的技术参考书,也适合用作大中专院校大数据专业相关的学生和老师的教材或教学参考书。- 《Python爬虫技术》 (3007次下载)
- 《Spark实用教程_scala语言》 (261次下载)
- 《Flink实用教程_scala和python双语版》 (84次下载)
- 《PySpark实用教程_python语言》 (44次下载)
- 《Spark机器学习_scala语言》 (15次下载)
挣积分
用户可以上传项目资源到本站,我们会根据资源的质量和价值计算积分给用户。
用户可以使用自己账号下的积分换取本站VIP资源(教程、项目、图书等)。
请联系我们
- Email:zz_kapper@163.com
- QQ:185314368(张老师)