编辑推荐

适读人群:《Spark GraphX实战》面向对图计算感兴趣的读者,旨在帮助读者掌握SparkGraphX的相关知识及其应用。

√描绘了图计算应用场景,用实例教你如何交互式使用GraphX

√清晰介绍如何从常规数据构建大图及用图算法和图架构解决问题

√了解用于增强应用的图技术及如何将机器学习算法应用于图数据

√GraphXAPI|为大图开发图算法|用于图的机器学习算法|图的可视化

内容简介

  《Spark GraphX实战》是一本SparkGraphX入门书籍。前5章为基础内容,即使读者对Spark、GraphX、Scala不熟悉,也能快速上手;后5章为图计算进阶,主要是图算法和机器学习算法的相关内容。专门讲图计算的书很少,《Spark GraphX实战》在第2、3、4章介绍了图的基础知识、GraphX基础知识、GraphX内置的图算法。第6章到第10章,主要介绍了GraphX之外的图算法、机器学习、图工具、GraphX监控和优化、GraphX的能力增强等实用技能。第9章和第10章主要介绍性能调优和监控,主要面向生产环境,有不少可以借鉴的技巧。

  《Spark GraphX实战》面向对图计算感兴趣的读者,旨在帮助读者掌握SparkGraphX的相关知识及其应用。

作者简介

  书作译者文字水平较高,行文流畅,且工作在编程第一线,拥有扎实的理论基础和实践经验,相信会为读者奉上一本质量上乘的图书。

  MichaelMalak一直从事软件开发工作,自2013年年初以来他一直用Spark为财富200强的公司做开发工作,经常进行演示和分享,特别是在科罗拉多州他住的丹佛/博尔德地区。他的个人技术博客的地址是http://technicaltidbit.com。

  RobinEast在一些大型企业曾担任过15年以上的顾问,在金融、政府、医疗保健和公共事业领域提供大数据和智能解决方案。他是Worldpay的数据科学家,帮助公司实现把数据用于核心业务上。可以在这里看到他在Spark、GraphX和机器学习方面的作品:https://mlspeed.wordpress.com。

目录

目录

序言...............XI

致谢.............XIII

关于《Spark GraphX实战》.....XIV

关于封面插图.................................XVIII

第1部分 Spark和图
1 两项重要的技术:Spark和图........3

1.1 Spark:超越HadoopMapReduce...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 把快如闪电的图处理放到一起:SparkGraphX.............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 用SparkShell做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 PregelAPI.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和RDDHashMap来提升性能.................................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 historyserver...................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中使用Java7................................238

10.1.2 在GraphX中使用Java8................................245

10.1.3 未来GraphX是否会支持Python或者R......245

10.2 其他可视化工具:ApacheZeppelin和d3.js...............245

10.3 类似一个数据库:SparkJobServer.............................248

10.3.1 示例:查询Slashdot好友的分离程度..........250

10.3.2 更多使用SparkJobServer的例子.................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 《Spark GraphX实战》中的Scala小贴士.........278

前言/序言

  序言
  图(Graph)是什么?图是由边和顶点组成的,不是由坐标轴和刻度构成的。在Spark中是如何使用图的?这就是《Spark GraphX实战》将要回答的问题。
  常常说,“图可以做任何事情”,或者“有很多不同的事情可以用图来实现”。当然了,这两种说法等于什么也没说。所以在《Spark GraphX实战》中我们展示了一些具体的、实际的图应用,以及探讨如何用SparkGraphX实现这些图应用。
  《Spark GraphX实战》中有许多专业术语:大数据、Hadoop、Spark、图、机器学习、Scala和函数式编程,这些内容《Spark GraphX实战》都会一一讲解。《Spark GraphX实战》会涉及技术的高级部分,但不会涉及编程能力的每个方面,如Java编程。
  下图是Google在趋势上的统计,展示了这些专业术语在2016年之前的受欢迎程度。
  BigData
  Hadoop
  Machinelearning
  ApacheSparkEdgesandvertices
  200520072009201120132015
  注意,通常用Spark和图作为规范的通用术语,而不是ApacheSpark和Edgesandvertices,趋势上后者已明显被取代。机器学习和图,在计算机科学中有悠久的历史,现在作为主流的大数据技术,在商业领域又引起了新的潮流。如果你在学校学习过这些技术的理论知识,那么现在准备实践一下这些技术吧。
  许多我们正在或曾经工作过的公司,已经把Spark用在生产环境中了,尽管不一定用了GraphX。当尝试用GraphX做一些图解决方案的原型时,会很方便。如果你已经有了一个Spark集群或者决定用云平台上的Spark集群(例如Databricks或Amazon),那么无须重新搭建一个新的特定于图计算的集群,并且你可以在GraphXAPI中使用已有的Spark技能。现在越来越多的图应用为大家所熟知,从根据Twitter数据发掘出恐怖分子网络到根据信用卡交易数据发现欺诈行为,GraphX已成为一个快速尝试这些图算法场景的易于使用的平台。
  《Spark GraphX实战》有两个明确目标:一是全面覆盖SparkGraphX的方方面面;二是以读者在前面提到的大数据和图计算方面没有任何专业知识为假定前提。写这《Spark GraphX实战》最大的挑战是要有许多技术储备,特别是Spark、Scala和图;了解大量的GraphXAPI以及图的不同用法也是不小的挑战。面对这种情形,《Spark GraphX实战》就需要与其他技术书籍略有不同:首先要花点时间入门,前5章主要讲解的就是基础内容;《Spark GraphX实战》还有大量有趣的实例,可以跟着一步步练习。《Spark GraphX实战》中涉及的其他技术,读者需要另做学习,《Spark GraphX实战》将努力做到让读者并不需要有过多背景知识和经验,就可以浅显易懂地了解图所能解决的问题。
  致谢
  感谢Manning出版社许多工作人员对《Spark GraphX实战》出版所做的努力,特别需要感谢三个人,他们的诸多指导使《Spark GraphX实战》可以较好地完成。MarinaMichaels,我们的开发编辑,从一开始就指出有些章节有很大的技术问题,这些问题大都是Spark和图计算的新问题。MichaelRoberts,我们的技术开发编辑,在《Spark GraphX实战》的制作过程中,与Marina一样,他给出了大量的建议。AntonioMagnaghi,我们的技术校对,不但对《Spark GraphX实战》的示例代码进行了严谨的核对,还编辑校对了《Spark GraphX实战》的文本内容。
  同时也感谢《Spark GraphX实战》草稿时期给出诸多有价值建议的读者,他们是AndyPetrella,BrentFoust,CharlesFeduke,GauravBhardwaj,JasonKolter,JustinFister,MichaelBright,Paul-MichaelSorhaindo,RodrigoAbreu,RomiKuntsman,SumitPal,VincentLiard。
  作者MichaelMalak感谢妻子和孩子在这几个月写作期间给予的耐心支持。
  作者RobinEast感谢妻子和两个儿子,他们容忍和支持了作者长时间的写作以及在楼上偶尔消失。
  关于《Spark GraphX实战
  通过学习《Spark GraphX实战》,希望能降低难懂的图学习门槛,了解如何在市场份额最大的分布式计算框架ApacheSpark中开发图应用。
  《Spark GraphX实战》的读者对象
  我们假定《Spark GraphX实战》的读者并不熟悉Spark、Scala和图相关的知识,《Spark GraphX实战》会快速学习前面提到的这些知识,会特别侧重于Scala。在第3章有Scala的简要介绍,《Spark GraphX实战》中只要出现新的Scala知识点都会有Scala小贴士做详细介绍(完整的列表见附录D)。实际上,《Spark GraphX实战》通过第3章、Scala小贴士和附录对Scala做了较全面的介绍。
  另外,虽然在大学的图论课程中数学证明很常见,但《Spark GraphX实战》完全不做数学证明。《Spark GraphX实战》的目标是图算法和图应用,有时会应需介绍图相关的术语。
  《Spark GraphX实战》使用的是Spark/GraphX1.6版本。
  我们假定读者在Java语言编程方面有一些经验,而在图方面要求不多,但通过书中插图能自然地知道这些图应用。
  《Spark GraphX实战》的内容组织
  《Spark GraphX实战》分为3个部分。第1部分有3章,主要介绍使用SparkGraphX的准备知识。第2部分有4章,主要介绍如何使用GraphX。第3部分有3章,主要介绍GraphX的进阶知识。也可以将《Spark GraphX实战》分为两部分,前5章为准备知识和GraphX的基本API,后5章为GraphX应用。
  下面是各章的内容提要。
  .第1章介绍了什么是大数据、Spark和图,SparkGraphX如何处理数据流。第1章是一本迷你书,篇幅不长但内容涉及面较广。
  .第2章简单示范了如何使用GraphX,无须具有GraphX经验。
  .第3章介绍了Spark、Scala和图的基础知识。
  .第4章介绍了SparkGraphX的基础操作,以及如何使用GraphX的两个主要算法:Map/Reduce和Pregel。
  .第5章演示了如何使用GraphX的诸多内置算法。
  .第6章介绍了GraphXAPI之外的内容,即20世纪中期经典的图算法,并用GraphX实现了这些算法。
  .第7章重点讲机器学习。机器学习的内容本身就够讲一《Spark GraphX实战》的,这里没有讲解太多机器学习的基础知识和经验,而是直接介绍监督学习、无监督学习和半监督学习的高级实例。
  .第8章展示了GraphX如何完成一些自定义操作,有可能会构建一个图处理库:读RDF文件、图的合并、图查找和计算全局聚类系数。
  .第9章介绍了如何监控性能以及查看正在执行的GraphX应用程序,如何利用缓存、checkpointing和序列化调优做性能调优。
  .第10章介绍了在GraphX中如何使用Scala之外的语言(强烈建议不要这么做),以及如何使用一些工具来补充GraphX的不足。展示了用GraphX在ApacheZeppelin的交互式命令行notebook上对图进行可视化。第三方的工具SparkJobServer可以让GraphX从单纯的批处理系统转变成一个在线图数据库。最后,介绍了Github上的一个项目—GraphFrames(GraphX的开发者开发的),它用SparkSQLDataFrames而非RDD提供了一种方便和高性能的图查询方式。
  另外,《Spark GraphX实战》包含4个附录。附录A介绍了Spark的安装方法,附录B简要介绍了Gephi可视化软件,附录C包含关于GraphX的在线资料以及如何跟上社区最新进展,附录D中列出了《Spark GraphX实战》中的Scala小贴士。如果你在Spark、Scala或图方面是新手,通过前5章的阅读,能力可以得到提升。然后,就可以选择性地阅读后面5章的内容了。如果你对Spark、Scala和图的知识已经比较精通,但对GraphX还不熟悉,那么可以跳过前3章甚至前5章的内容直接阅读后面的内容。
  关于《Spark GraphX实战》中的代码
  《Spark GraphX实战》中的源代码可以在博文视点官方网站上下载,地址为https://www.broadview.com.cn。这《Spark GraphX实战》中的大部分代码是可以在交互式的SparkShell中执行的。从技术上来讲,Scala扩展是一个误称,因为这些文件不能用scalac编译器进行编译。要想让这些实例代码方便地编译和执行,可以用Maven的pom.xml或SBT的.sbt文件完成。《Spark GraphX实战》中的源代码实例,有带编号的列表,也有普通的文本,这两类源代码都用了等宽字体以便与普通的正文区分开来。
  一般情况下,源码都会被格式化,我们添加了换行符,也修改了缩进以便适应《Spark GraphX实战》的页面大小,甚至在代码清单中添加了续行符(.)。另外,如果正文中对代码有解释,源码中的注释会被删掉。代码注释会附带许多列表,以突出重要的概念。
  《Spark GraphX实战》的示例代码也可以从如上的出版社网站上下载。
  关于作者
  MichaelMalak一直从事软件开发工作,自2013年年初以来他一直用Spark为财富200强的公司做开发工作,经常进行演示和分享,特别是在科罗拉多州他住的丹佛/博尔德地区。他的个人技术博客的地址是http://technicaltidbit.com。
  RobinEast在一些大型企业曾担任过15年以上的顾问,在金融、政府、医疗保健和公共事业领域提供大数据和智能解决方案。他是Worldpay的数据科学家,帮助公司实现把数据用于核心业务上。可以在这里看到他在Spark、GraphX和机器学习方面的作品:https://mlspeed.wordpress.com。
  配套服务
  轻松注册成为博文视点社区用户(www.broadview.com.cn),即可享受以下服务:下载资源:《Spark GraphX实战》所提供的示例代码及资源文件均可在“下载资源”处下载。提交勘误:您对书中内容的修改意见可在“提交勘误”处提交,若被采



其他推荐