Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。这是一本专门介绍Spark的图书,旨在教会读者利用Spark构建实用的数据科学解决方案。
本书内容包括14章,由浅入深地介绍了数据科学生态系统、数据获取、输入格式与模式、探索性数据分析、利用Spark进行地理分析、采集基于链接的外部数据、构建社区、构建推荐系统、新闻词典和实时标记系统、故事除重和变迁、情感分析中的异常检测、趋势演算、数据保护和可扩展算法。
本书适合数据科学家以及对数据科学、机器学习感兴趣的读者阅读,需要读者具备数据科学相关的基础知识,并通过阅读本书进一步提升Spark运用能力,从而创建出高效且实用的数据科学解决方案。
1.本书采用 Spark 2.0,并结合 Scala 2.11、Maven 和 Hadoop;
2.案例丰富:读者将基于一系列典型的案例,学习Spark在构建商业级数据科学解决方案中的应用;
3.作者是数据战略及其执行方面的专家,拥有多年的商业经验,为读者呈现了一个真实的、令人兴奋的数据科学世界;
3.提供配套代码。
安德鲁·摩根(Andrew Morgan)是数据战略及其执行方面的专家,在支持技术、系统架构和实现数据科学方面拥有丰富的经验。他在数据行业拥有20多年的经验,曾为一些久负盛名的公司及其全球客户设计系统——通常是大型、复杂和国际性的项目。2013年,他创办了数据科学和大数据工程咨询公司ByteSumo,目前在与欧洲和美国的客户进行合作。Andrew是一位活跃的数据科学家,也是趋势演算(TrendCalculus)算法的发明者。该算法是他为自己的研究项目而开发的,该项目旨在研究基于机器学习的长期预测,这些预测可以在不断变化的文化、地缘政治和经济趋势中发现规律。他还是Hadoop Summit EU数据科学委员会的成员,并在许多会议上就各种数据主题发表过演讲。他也活跃于他的居住地伦敦的数据科学和大数据社区。
安托万·阿门德(Antoine Amend)是一位对大数据工程和可扩展计算充满热情的数据科学家。这本书的主题是“折腾”天文数字量级的非结构化数据以获得新的见解,这主要源于Antoine的理论物理学背景。他于2008年毕业并获得天体物理学硕士学位。在Hadoop的早期阶段,在大数据的概念普及之前,他曾在瑞士的一家大型咨询公司工作。从那时起,他就开始接触大数据技术。现在他在巴克莱银行担任网络安全数据科学部门的主管。通过将科学方法与核心IT技能相结合,Antoine连续两年获得了在得克萨斯州奥斯汀举行的大数据世界锦标赛决赛资格。他在2014年和2015年都名列前12位(超过2 000多名竞争对手),这两次比赛中他还使用了本书介绍的方法和技术赢得了创新奖。
大卫·乔治(David George)是一位杰出的分布式计算专家,拥有超过15年的数据系统从业经验,主要服务于全球闻名的IT咨询机构和品牌。他很早以前就开始使用Hadoop核心技术,并做过大规模的实施。David总是采用务实的方法进行软件设计,并重视简约中的优雅。
如今,他继续作为首席工程师为金融行业客户设计可扩展的应用,并满足一些较为严苛的需求。他的新项目侧重于采用先进的人工智能技术来提高知识产业的自动化水平。
马修·哈利特(Matthew Hallett)是一名软件工程师和计算机科学家,拥有超过15年的从业经验。他是一名面向对象的“专家级程序员”和系统工程师,拥有丰富的底层编程范式知识。在过去的几年里,他在Hadoop和关键业务环境中的分布式编程方面积累了丰富的专业知识,这些环境由数千节点的数据中心组成。Matthew在分布式算法和分布式计算体系结构的实施方面拥有多种语言的咨询经验,目前是“四大审计公司”数据科学与工程团队的数据工程师顾问。
第 1章 数据科学生态系统 1
1.1 大数据生态系统简介 1
1.1.1 数据管理 2
1.1.2 数据管理职责 2
1.1.3 合适的工具 4
1.2 数据架构 4
1.2.1 数据采集 5
1.2.2 数据湖 6
1.2.3 数据科学平台 7
1.2.4 数据访问 8
1.3 数据处理技术 8
1.4 配套工具 10
1.4.1 Apache HDFS 10
1.4.2 亚马逊S3 12
1.4.3 Apache Kafka 13
1.4.4 Apache Parquet 14
1.4.5 Apache Avro 15
1.4.6 Apache NiFi 16
1.4.7 Apache YARN 17
1.4.8 Apache Lucene 18
1.4.9 Kibana 19
1.4.10 Elasticsearch 20
1.4.11 Accumulo 21
1.5 小结 22
第 2章 数据获取 23
2.1 数据管道 23
2.1.1 通用采集框架 24
2.1.2 GDELT数据集简介 25
2.2 内容登记 32
2.2.1 选择和更多选择 32
2.2.2 随流而行 32
2.2.3 元数据模型 33
2.2.4 Kibana仪表盘 35
2.3 质量保证 36
2.3.1 案例1——基本质量检查,无争用用户 36
2.3.2 案例2——进阶质量检查,无争用用户 36
2.3.3 案例3——基本质量检查,50%使用率争用用户 37
2.4 小结 37
第3章 输入格式与模式 39
3.1 结构化的生活是美好的生活 40
3.2 GDELT维度建模 40
3.3 加载数据 48
3.3.1 模式敏捷性 49
3.3.2 GKG ELT 51
3.4 Avro 54
3.4.1 Spark-Avro方法 55
3.4.2 教学方法 57
3.4.3 何时执行Avro转换 61
3.5 Apache Parquet 62
3.6 小结 63
第4章 探索性数据分析 64
4.1 问题、原则与规划 65
4.1.1 理解EDA问题 65
4.1.2 设计原则 65
4.1.3 探索的总计划 66
4.2 准备工作 67
4.2.1 基于掩码的数据剖析简介 67
4.2.2 字符类掩码简介 71
4.2.3 构建基于掩码的剖析器 73
4.3 探索GDELT 86
4.4 小结 107
第5章 利用Spark进行地理分析 108
5.1 GDELT和石油 108
5.1.1 GDELT事件 109
5.1.2 GDELT GKG 110
5.2 制订行动计划 110
5.3 GeoMesa 111
5.3.1 安装 112
5.3.2 GDELT采集 112
5.3.3 GeoMesa采集 113
5.3.4 GeoHash 117
5.3.5 GeoServer 120
5.4 计量油价 123
5.4.1 使用GeoMesa查询API 123
5.4.2 数据准备 125
5.4.3 机器学习 130
5.4.4 朴素贝叶斯 131
5.4.5 结果 132
5.4.6 分析 133
5.5 小结 134
第6章 采集基于链接的外部数据 135
6.1 构建一个大规模的新闻扫描器 135
6.1.1 访问Web内容 136
6.1.2 与Spark集成 138
6.1.3 创建可扩展的生产准备库 139
6.2 命名实体识别 142
6.2.1 Scala库 143
6.2.2 NLP攻略 143
6.2.3 构建可扩展代码 146
6.3 GIS查询 148
6.3.1 GeoNames数据集 148
6.3.2 构建高效的连接 149
6.3.3 内容除重 153
6.4 名字除重 154
6.4.1 用Scalaz进行函数式编程 155
6.4.2 简单清洗 158
6.4.3 DoubleMetaphone算法 158
6.5 新闻索引仪表板 160
6.6 小结 162
第7章 构建社区 163
7.1 构建一个人物图谱 163
7.1.1 联系链 164
7.1.2 从Elasticsearch中提取数据 166
7.2 使用Accumulo数据库 168
7.2.1 设置Accumulo 168
7.2.2 单元级安全 169
7.2.3 迭代器 170
7.2.4 从Elasticsearch到Accumulo 170
7.2.5 从Accumulo读取 173
7.2.6 AccumuloGraphxInputFormat和EdgeWritable 175
7.2.7 构建图 175
7.3 社区发现算法 177
7.3.1 Louvain算法 177
7.3.2 加权社区聚类 178
7.4 GDELT数据集 193
7.4.1 Bowie 效应 194
7.4.2 较小的社区 195
7.4.3 使用Accumulo单元级的安全性 196
7.5 小结 197
第8章 构建推荐系统 198
8.1 不同的方法 198
8.1.1 协同过滤 199
8.1.2 基于内容的过滤 199
8.1.3 自定义的方法 199
8.2 信息不完整的数据 200
8.2.1 处理字节 200
8.2.2 创建可扩展的代码 203
8.2.3 从时域到频域 204
8.3 构建歌曲分析器 209
8.4 构建一个推荐系统 214
8.4.1 PageRank算法 214
8.4.2 构建个性化的播放列表 217
8.5 扩大“蛋糕厂”规模 217
8.5.1 构建播放列表服务 217
8.5.2 应用Spark任务服务器 219
8.5.3 用户界面 223
8.6 小结 224
第9章 新闻词典和实时标记系统 226
9.1 土耳其机器人 226
9.1.1 人类智能任务 227
9.1.2 引导分类模型 227
9.1.3 懒惰、急躁、傲慢 233
9.2 设计Spark Streaming应用 234
9.2.1 两个架构的故事 234
9.2.2 Lambda架构的价值 237
9.2.3 Kappa架构的价值 239
9.3 消费数据流 240
9.3.1 创建GDELT数据流 240
9.3.2 创建Twitter数据流 242
9.4 处理Twitter数据 243
9.4.1 提取URL和主题标签 244
9.4.2 保存流行的主题标签 245
9.4.3 扩展缩短的URL 246
9.5 获取HTML内容 248
9.6 使用Elasticsearch作为缓存层 249
9.7 分类数据 252
9.7.1 训练朴素贝叶斯模型 253
9.7.2 确保线程安全 254
9.7.3 预测GDELT数据 255
9.8 Twitter土耳其机器人 256
9.9 小结 258
第 10章 故事除重和变迁 260
10.1 检测近似重复 260
10.1.1 从散列开始第 一步 262
10.1.2 站在“互联网巨人”的肩膀上 263
10.1.3 检测GDELT中的近似重复 266
10.1.4 索引GDELT数据库 271
10.2 构建故事 275
10.2.1 构建词频向量 275
10.2.2 维度灾难,数据科学之痛 277
10.2.3 优化KMeans 278
10.3 故事变迁 281
10.3.1 平衡态 281
10.3.2 随时间追踪故事 283
10.3.3 构建故事的关联 290
10.4 小结 294
第 11章 情感分析中的异常检测 295
11.1 在Twitter上追踪美国大选 296
11.1.1 流式获取数据 296
11.1.2 成批获取数据 297
11.2 情感分析 300
11.2.1 格式化处理Twitter数据 300
11.2.2 使用斯坦福NLP 302
11.2.3 建立管道 304
11.3 使用Timely作为时间序列数据库 306
11.3.1 存储数据 306
11.3.2 使用Grafana可视化情感 309
11.4 Twitter与戈德温(Godwin)点 311
11.4.1 学习环境 311
11.4.2 对模型进行可视化 314
11.4.3 Word2Graph和戈德温点 315
11.5 进入检测讽刺的一小步 320
11.5.1 构建特征 320
11.5.2 检测异常 324
11.6 小结 325
第 12章 趋势演算 326
12.1 研究趋势 327
12.2 趋势演算算法 328
12.2.1 趋势窗口 328
12.2.2 简单趋势 331
12.2.3 用户定义聚合函数 332
12.2.4 简单趋势计算 337
12.2.5 反转规则 339
12.2.6 FHLS条状图介绍 341
12.2.7 可视化数据 343
12.3 实际应用 351
12.3.1 算法特性 352
12.3.2 潜在的用例 352
12.4 小结 353
第 13章 数据保护 354
13.1 数据安全性 354
13.1.1 存在的问题 355
13.1.2 基本操作 355
13.2 认证和授权 356
13.3 访问 358
13.4 加密 359
13.4.1 数据处于静态时 359
13.4.2 数据处于传输时 368
13.4.3 混淆/匿名 369
13.4.4 遮罩 372
13.4.5 令牌化 375
13.5 数据处置 377
13.6 Kerberos认证 378
13.6.1 用例1:Apache Spark在受保护的HDFS中访问数据 379
13.6.2 用例2:扩展到自动身份验证 381
13.6.3 用例3:从Spark连接到安全数据库 381
13.7 安全生态 383
13.7.1 Apache Sentry 383
13.7.2 RecordService 384
13.8 安全责任 385
13.9 小结 386
第 14章 可扩展算法 387
14.1 基本原则 387
14.2 Spark架构 390
14.2.1 Spark的历史 390
14.2.2 动态组件 391
14.3 挑战 395
14.3.1 算法复杂性 395
14.3.2 数值异常 395
14.3.3 洗牌 398
14.3.4 数据模式 398
14.4 规划你的路线 399
14.5 设计模式和技术 409
14.5.1 Spark API 410
14.5.2 摘要模式 411
14.5.3 扩展并解决模式 411
14.5.4 轻量级洗牌 412
14.5.5 宽表模式 414
14.5.6 广播变量模式 415
14.5.7 组合器模式 416
14.5.8 集群优化 420
14.5.9 再分配模式 422
14.5.10 加盐键模式 423
14.5.11 二次排序模式 424
14.5.12 过滤过度模式 426
14.5.13 概率算法 426
14.5.14 选择性缓存 427
14.5.15 垃圾回收 428
14.5.16 图遍历 429
14.6 小结 430