具体描述
《Spark GraphX实战》是一本Spark GraphX入门书籍。前5章为基础内容,即使读者对Spark、GraphX、Scala不熟悉,也能快速上手;后5章为图计算进阶,主要是图算法和机器学习算法的相关内容。专门讲图计算的书很少,《Spark GraphX实战》在第2、3、4章介绍了图的基础知识、GraphX基础知识、GraphX内置的图算法。第6章到第10章,主要介绍了GraphX之外的图算法、机器学习、图工具、GraphX监控和优化、GraphX的能力增强等实用技能。第9章和第10章主要介绍性能调优和监控,主要面向生产环境,有不少可以借鉴的技巧。
《Spark GraphX实战》面向对图计算感兴趣的读者,旨在帮助读者掌握Spark GraphX的相关知识及其应用。
作者简介
Michael Malak一直从事软件开发工作,自 2013年年初以来他一直用 Spark为财富 200强的公司做开发工作,经常进行演示和分享,特别是在科罗拉多州他住的丹佛 /博尔德地区。他的个人技术博客的地址是 http://technicaltidbit.com。
Robin East在一些大型企业曾担任过 15年以上的顾问,在金融、政府、医疗保健和公共事业领域提供大数据和智能解决方案。他是 Worldpay的数据科学家,帮助公司实现把数据用于核心业务上。可以在这里看到他在 Spark、GraphX和机器学习方面的作品: https://mlspeed.wordpress.com。
目录信息
致谢XIII
关于本书 XIV
关于封面插图 XVIII
第1部分 Spark和图
1 两项重要的技术:Spark和图 3
1.1 Spark:超越Hadoop MapReduce 4
1.1.1 模糊的大数据定义 6
1.1.2 Hadoop:Spark之前的世界 6
1.1.3 Spark:内存中的 MapReduce处理 7
1.2 图:挖掘关系中的含义 9
1.2.1 图的应用 11
1.2.2 图数据的类型 12
1.2.3 普通的关系型数据库在图方面的不足 14
1.3 把快如闪电的图处理放到一起:Spark GraphX 14
1.3.1 图的属性:增加丰富性 15
1.3.2 图的分区:当图变为大数据集时 17
1.3.3 GraphX允许选择:图并行还是数据并行 19
1.3.4 GraphX支持的各种数据处理方式 19
1.3.5 GraphX与其他图系统 21
1.3.6 图存储:分布式文件存储与图数据库 23
1.4 小结 23
2 GraphX快速入门 24
2.1 准备开始并准备数据 24
2.2 用Spark Shell做GraphX交互式查询 26
2.3 PageRank算法示例 29
2.4 小结 31
3 基础知识 32
3.1 Scala—Spark的原生编程语言 33
3.1.1 Scala的理念:简洁和表现力 33
3.1.2 函数式编程 34
3.1.3 类型推断 38
3.1.4 类的声明 39
3.1.5 map和 reduce 41
3.1.6 一切皆是“函数” 42
3.1.7 与 Java的互操作性 44
3.2 Spark 44
3.2.1 分布式内存数据: RDD 44
3.2.2 延迟求值 47
3.2.3 集群要求和术语解释 49
3.2.4 序列化 50
3.2.5 常用的 RDD操作 50
3.2.6 Spark和 SBT初步 54
3.3 图术语解释 55
3.3.1 基础 55
3.3.2 RDF图和属性图 58
3.3.3 邻接矩阵 59
3.3.4 图查询系统 59
3.4 小结 60
第2部分 连接顶点
4 GraphX 基础 65
4.1 顶点对象与边对象 65
4.2 mapping操作 71
4.2.1 简单的图转换 71
4.2.2 Map/Reduce 73
4.2.3 迭代的 Map/Reduce 77
4.3 序列化/反序列化 79
4.3.1 读 /写二进制格式的数据 79
4.3.2 JSON格式 81
4.3.3 Gephi可视化软件的 GEXF格式 85
4.4 图生成 86
4.4.1 确定的图 86
4.4.2 随机图 88
4.5 Pregel API 90
4.6 小结 96
5 内置图算法 97
5.1 找出重要的图节点:网页排名 98
5.1.1 PageRank算法解释 98
5.1.2 在 GraphX中使用 PageRank 99
5.1.3 个性化的 PageRank 102
5.2 衡量连通性:三角形数 103
5.2.1 三角形关系的用法 103
5.2.2 Slashdot朋友和反对者的用户关系示例 104
5.3 查找最少的跳跃:最短路径 106
5.4 找到孤岛人群:连通组件 107
5.4.1 预测社交圈子 108
5.5 受欢迎的回馈:增强连通组件 114
5.6 社区发现算法:标签传播 115
5.7 小结 117
6 其他有用的图算法118
6.1 你自己的GPS:有权值的最短路径 119
6.2 旅行推销员问题:贪心算法 124
6.3 路径规划工具:最小生成树 127
6.3.1 基于 Word2Vec的推导分类法和最小生成树 131
6.4 小结 135
7 机器学习 136
7.1 监督、无监督、半监督学习 137
7.2 影片推荐: SVDPlusPlus. 139
7.2.1 公式解释 146
7.3 在MLlib中使用GraphX 146
7.3.1 主题聚类:隐含狄利克雷分布 147
7.3.2 垃圾信息检测: LogisticRegressionWithSGD 156
7.3.3 使用幂迭代聚类进行图像分割(计算机视觉) 160
7.4 穷人(简化版)的训练数据:基于图的半监督学习 165
7.4.1 K近邻图构建 168
7.4.2 半监督学习标签传播算法 175
7.5 小结 180
第3部分 更多内容
8 缺失的算法 183
8.1 缺失的基本图操作 184
8.1.1 通用意义上的子图 184
8.1.2 图合并 185
8.2 读取RDF图文件 189
8.2.1 顶点匹配以及图构建 189
8.2.2 使用 IndexedRDD和 RDD HashMap来提升性能 191
8.3 穷人(简化版)的图同构:找到Wikipedia缺失的信息 197
8.4 全局聚类系数:连通性比较 202
8.5 小结 205
9 性能和监控 207
9.1 监控Spark应用 208
9.1.1 Spark如何运行应用 208
9.1.2 用 Spark监控来了解你的应用的运行时信息 211
9.1.3 history server 221
9.2 Spark配置 223
9.2.1 充分利用全部 CPU资源 226
9.3 Spark性能调优 227
9.3.1 用缓存和持久化来加速 Spark 227
9.3.2 checkpointing 230
9.3.3 通过序列化降低内存压力 232
9.4 图分区 233
9.5 小结 235
10 更多语言以及工具 237
10.1 在GraphX中使用除Scala外的其他语言 238
10.1.1 在 GraphX中使用 Java 7 238
10.1.2 在 GraphX中使用 Java 8 245
10.1.3 未来 GraphX是否会支持 Python或者 R 245
10.2 其他可视化工具:Apache Zeppelin 和 d3.js 245
10.3 类似一个数据库:Spark Job Server 248
10.3.1 示例:查询 Slashdot好友的分离程度 250
10.3.2 更多使用 Spark Job Server的例子 253
10.4 通过GraphFrames在Spark的图上使用SQL 254
10.4.1 GraphFrames和 GraphX的互操作性 255
10.4.2 使用 SQL进行便捷、高性能的操作 257
10.4.3 使用 Cypher语言的子集来进行顶点搜索 258
10.4.4 稍微复杂一些的 YAGO图同构搜索 260
10.5 小结 264
附录A 安装Spark 266
附录B Gephi可视化软件 271
附录C 更多资源 275
附录D 本书中的Scala小贴士 278
· · · · · · (收起)
读后感
用户评价
这本书的风格,从排版和引用来看,透着一股严谨的学术气息,但又不失工程实践的务实。我特别留意到它似乎花了相当的篇幅来讨论“性能调优”这个话题,这在很多偏理论的书籍中是缺失的。我期待看到的内容包括:如何选择合适的内存配置来缓存图数据?当图计算任务因内存溢出失败时,哪些是排查错误的常见路径?书中是否有对不同图计算模型(如Pregel模型)的资源消耗进行细致的量化分析?如果它能提供一个详尽的“故障排除指南”,针对在生产环境中可能遇到的各种GC暂停、网络I/O瓶颈等问题给出明确的诊断流程,那么这本书的价值将大大提升。它不仅仅是一本“教你如何做”的书,更像是一本“在你遇到问题时如何解决”的宝典。这种面向实战的深度剖析,是真正区分优秀技术书和普通教程的关键所在。
这本书的视角似乎非常宏大,它不仅关注单个图算法的实现,更着眼于如何将图计算融入到整个大数据处理的蓝图中。我非常想知道作者是如何定位GraphX在整个Spark生态系统中的角色的,它和Spark SQL的数据框(DataFrame)在处理关系型数据时的协同与互补关系是什么?是不是有专门的章节来论述如何利用GraphFrames的便利性和GraphX的底层效率来设计混合计算流程?而且,如果这本书能够触及到图嵌入(Graph Embeddings)或图神经网络(GNNs)的初步概念,并说明如何利用Spark的大规模分布式能力来预处理或训练这些模型,那将是极具前瞻性的。它似乎在试图回答:面对TB级别的图数据,我们应该选择哪种计算范式?这种高屋建瓴的战略性讨论,远超出了单纯的技术实现层面,更像是在规划未来数据分析的架构蓝图。
我对这本书的理论深度感到非常好奇,特别是关于那些核心图算法的讲解部分。我猜测作者在阐述PageRank、社区发现(比如Louvain算法的分布式实现)或者最短路径算法时,肯定会从Spark的RDD/DataFrame操作层面去深入剖析其并行化策略。最吸引我的是,它是否详细说明了在Spark集群上,这些迭代式算法是如何通过`AggregateMessages`或类似的机制进行高效通信和状态维护的。很多书籍只是简单地罗列公式,但这本书似乎想深入到执行引擎的视角。例如,当处理一个具有数万亿条边的图时,数据倾斜问题如何通过GraphX的Partitioning策略来缓解?如果能提供一些自定义算子(Custom Operators)的编写示例,展示如何针对特定业务逻辑优化计算步骤,那就更完美了。这本书的气质似乎是“代码即理论,理论即性能”,要求读者不仅要理解算法思想,还要精通如何在Spark的分布式架构中将其高效映射。
这本书的封面设计着实吸引人,那种深邃的蓝色调搭配着闪烁的几何图形,让人一眼就能感受到它蕴含的强大计算能力与抽象美感。光是翻阅前几页的目录,我就对作者如何将复杂的图计算理论融入到实际应用场景中充满了期待。尤其让我眼前一亮的是,它似乎非常注重底层原理的剖析,不像市面上很多工具书那样只停留在API调用的表面。我猜想,这本书一定花了不少篇幅来讲解Spark生态系统中GraphFrames与GraphX之间的底层数据结构差异,以及它们在分布式环境下的性能优化策略。不知道作者有没有深入探讨那种处理超大规模稀疏图时,内存管理和数据序列化如何影响整体吞吐量的具体案例。如果能看到一些基于真实世界网络拓扑(比如社交网络或交通网络)的性能基准测试对比,那绝对是锦上添花,能帮助读者更好地在理论和实践之间架起桥梁。这本书看起来不像是那种速成手册,更像是一份需要沉下心来细细研读的深度参考资料,非常适合那些希望不仅仅会用工具,更想理解工具“为什么”这样工作的工程师。
初读这本书的章节安排,我立刻注意到了它在“数据预处理”这一环节上似乎下了很大功夫。这通常是图计算项目中最容易被忽视但却至关重要的步骤。我希望书中能提供一些非常具体、贴近工业界的经验,比如如何处理异构图数据,如何有效地将非结构化文本信息转化为可用于图算法的节点和边属性。市面上很多教材对“数据清洗”的描述过于笼统,而处理真实世界的噪声数据往往才是耗时最长的工作。更进一步,如果作者能分享一些关于如何构建高效图模式(Schema)的实践建议就太棒了,毕竟模式设计直接决定了后续算法的效率和可扩展性。我特别关注那些涉及时间序列或动态图的章节,因为现实世界的网络总是在不断变化。这本书似乎暗示了它会探讨如何利用Spark的流处理能力来实时更新图结构,而不是仅仅处理静态数据集。这种对“动态性”的关注,使得它从众多图计算书籍中脱颖而出,具有很强的时效性和前瞻性。
graphx介绍入门书
还行吧
graphx 入门。 还是喜欢 pregel 多一点, 书翻译的不错很流畅。
不错的入门书,对Scala的简单阐释也清晰易读
市面上讲graphx的书很少,这书还是不错的。 通过看这本书,写了一个小项目,感兴趣的可以看看。 GitHub地址:https://github.com/weijie-he/jinyong