From 7a3bc221e87a5e73acc9094fd71107af2fe71575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A8=E4=BF=9D=E6=9C=9F?= <2550420029@qq.com> Date: Thu, 7 Nov 2019 16:05:40 +0800 Subject: [PATCH 1/6] chapter4 --- chapter4/4.2SparkGraphX计算生成最短路径.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/chapter4/4.2SparkGraphX计算生成最短路径.md b/chapter4/4.2SparkGraphX计算生成最短路径.md index 5e5bb0c..9edb1a7 100644 --- a/chapter4/4.2SparkGraphX计算生成最短路径.md +++ b/chapter4/4.2SparkGraphX计算生成最短路径.md @@ -110,9 +110,12 @@ initialGraph.pregel( // 激活态的节点调用该方法发送消息 // 将上一个节点和当前节点的属性添加到array中。可以理解将迭代的节点都添加到array中 var array = new ArrayBuffer[Long]() - println(edgeTriplet.srcAttr._1 +"|"+edgeTriplet.dstAttr._1) array ++= edgeTriplet.srcAttr._1 - array ++= edgeTriplet.dstAttr._1 + val dstarr = edgeTriplet.dstAttr._1 + if (dstarr.length>1) + array +=dstarr(dstarr.length-1) + else + array ++= edgeTriplet.dstAttr._1 // 相邻点接收到信息,将消息中的值与自身的值做比较,决定是否更改自身的值,每个更改过值的点将被激活 if(edgeTriplet.srcAttr._2 + edgeTriplet.attr < edgeTriplet.dstAttr._2) { Iterator((edgeTriplet.dstId, (array,edgeTriplet.srcAttr._2 + edgeTriplet.attr ))) From e3102e43ea435ed073ddcc841e000525a81b3f64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A8=E4=BF=9D=E6=9C=9F?= <2550420029@qq.com> Date: Thu, 7 Nov 2019 16:17:12 +0800 Subject: [PATCH 2/6] chapter4 --- chapter4/4.1SparkGraphX定义图结构.md | 1 + chapter4/4.2SparkGraphX计算生成最短路径.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/chapter4/4.1SparkGraphX定义图结构.md b/chapter4/4.1SparkGraphX定义图结构.md index c8b9325..763ee40 100644 --- a/chapter4/4.1SparkGraphX定义图结构.md +++ b/chapter4/4.1SparkGraphX定义图结构.md @@ -19,6 +19,7 @@ > `GraphX`中有一个重要概念,所有的边都有一个方向,那么图就是有向图,如果忽略边的方向,就是无向图。 **有环图和无环图** + 有环图是包含循环的,一系列顶点构成一个环。无环图没有环。如果不关心终止条件,算法可能永远在环上执行,无法退出。 ![avatar](/image/环图.png) diff --git a/chapter4/4.2SparkGraphX计算生成最短路径.md b/chapter4/4.2SparkGraphX计算生成最短路径.md index 9edb1a7..eb47b1f 100644 --- a/chapter4/4.2SparkGraphX计算生成最短路径.md +++ b/chapter4/4.2SparkGraphX计算生成最短路径.md @@ -65,7 +65,7 @@ ## 4.2.2 使用 GraphX 计算生成最短路径 -之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资。(参照上一章节图结构) +之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资(参照上一章节图结构)。 ![avatar](/image/补给图.png) @@ -151,7 +151,7 @@ initialGraph.pregel( ``` -## 4.2.3 使用 Python GraphFrames定义了图结构 +## 4.2.3 使用 Python GraphFrames定义图结构 由于`GraphX`基于`RDD API`,不支持`Python API`,那么我们想用`Python`做图计算的时候该怎么办呢?这时候,我们可以使用 `GraphFrames`定义图结构。该类库是构建在`DataFrame`之上,它既能利用`DataFrame`良好的扩展性和强大的性能,同时也为`Scala`、`Java`和`Python提`供了统一的图处理`API`。 示例代码如下: From 050d237f396b2815903a74cf6242b15c614e66d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A8=E4=BF=9D=E6=9C=9F?= <2550420029@qq.com> Date: Thu, 7 Nov 2019 16:32:43 +0800 Subject: [PATCH 3/6] chapter4 --- chapter4/4.1SparkGraphX定义图结构.md | 5 ++++- chapter4/4.2SparkGraphX计算生成最短路径.md | 5 ++++- chapter4/4Spark图数据计算简介.md | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/chapter4/4.1SparkGraphX定义图结构.md b/chapter4/4.1SparkGraphX定义图结构.md index 763ee40..88c2922 100644 --- a/chapter4/4.1SparkGraphX定义图结构.md +++ b/chapter4/4.1SparkGraphX定义图结构.md @@ -37,7 +37,10 @@ ### 4.1.3 Spark Graphx 定义图结构 假设我们要使用`Graphx`项目构造一个由军事补给站组成的属性图。顶点属性包含`ID`和补给站名称,各顶点间的关系由线路构成。生成其属性图关系如下: -![avatar](/image/补给图.png) + +

+ +

顶点属性数据: ``` diff --git a/chapter4/4.2SparkGraphX计算生成最短路径.md b/chapter4/4.2SparkGraphX计算生成最短路径.md index eb47b1f..32db037 100644 --- a/chapter4/4.2SparkGraphX计算生成最短路径.md +++ b/chapter4/4.2SparkGraphX计算生成最短路径.md @@ -67,7 +67,10 @@ ## 4.2.2 使用 GraphX 计算生成最短路径 之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资(参照上一章节图结构)。 -![avatar](/image/补给图.png) + +

+ +

示例代码如下: diff --git a/chapter4/4Spark图数据计算简介.md b/chapter4/4Spark图数据计算简介.md index 36762c1..90db9bc 100644 --- a/chapter4/4Spark图数据计算简介.md +++ b/chapter4/4Spark图数据计算简介.md @@ -2,6 +2,8 @@ `GraphX`是`Spark`的分布式图处理框架。`GraphX`通过引入属性图:顶点和边均有属性的有向多重图,来扩充`Spark`的`RDD`。为了支持这种图计算,`GraphX`开发了一组基础功能操作。目前仍在不断扩充图算法,用来简化图计算的分析任务。 ![avatar](/image/Graphx.png) - +

+ +

本章节主要介绍`GraphX`的核心抽象模型—属性图,并通过实例介绍如何构造一个图、如何使用图计算计算最短路径。 From 696efbee7c80cc6e01451081069a57eb62acb167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A8=E4=BF=9D=E6=9C=9F?= <2550420029@qq.com> Date: Thu, 7 Nov 2019 16:35:38 +0800 Subject: [PATCH 4/6] chapter4 --- chapter4/4.1SparkGraphX定义图结构.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/chapter4/4.1SparkGraphX定义图结构.md b/chapter4/4.1SparkGraphX定义图结构.md index 88c2922..0a3dd4f 100644 --- a/chapter4/4.1SparkGraphX定义图结构.md +++ b/chapter4/4.1SparkGraphX定义图结构.md @@ -22,7 +22,10 @@ 有环图是包含循环的,一系列顶点构成一个环。无环图没有环。如果不关心终止条件,算法可能永远在环上执行,无法退出。 -![avatar](/image/环图.png) + +

+ +

**其他常用术语** From 6f3c9bedb3f35338169b8506b4700c40f351b741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A8=E4=BF=9D=E6=9C=9F?= <2550420029@qq.com> Date: Thu, 7 Nov 2019 16:37:06 +0800 Subject: [PATCH 5/6] chapter4 --- chapter4/4Spark图数据计算简介.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter4/4Spark图数据计算简介.md b/chapter4/4Spark图数据计算简介.md index 90db9bc..6261074 100644 --- a/chapter4/4Spark图数据计算简介.md +++ b/chapter4/4Spark图数据计算简介.md @@ -1,7 +1,7 @@ # 第四章:Spark图数据计算简介 `GraphX`是`Spark`的分布式图处理框架。`GraphX`通过引入属性图:顶点和边均有属性的有向多重图,来扩充`Spark`的`RDD`。为了支持这种图计算,`GraphX`开发了一组基础功能操作。目前仍在不断扩充图算法,用来简化图计算的分析任务。 -![avatar](/image/Graphx.png) +

From 43bc2044ae582fdba35eb949a4378431472a8077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=85=A2=E6=85=A2?= <905907915@qq.com> Date: Thu, 7 Nov 2019 16:43:16 +0800 Subject: [PATCH 6/6] WIN --- ...Pycharm搭建Python版Spark开发环境.md | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/chapter1/1.4Windows+Pycharm搭建Python版Spark开发环境.md b/chapter1/1.4Windows+Pycharm搭建Python版Spark开发环境.md index 908776a..091b857 100644 --- a/chapter1/1.4Windows+Pycharm搭建Python版Spark开发环境.md +++ b/chapter1/1.4Windows+Pycharm搭建Python版Spark开发环境.md @@ -1,8 +1,10 @@ ## 1.4 Windows+Pycharm搭建Python版Spark开发环境 +开发`Spark`程序的时候,如果每次都把代码提交到集群上运行,想必会非常麻烦,那么搭建一个`windows`版的开发环境是非常有必要的。 + ### 1.4.1 JDK安装 -在DOC命令行窗口输入java -version出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的spark版本需要使用jdk1.8版本以上。 +在`DOC`命令行窗口输入`java -version`出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的`Spark`版本需要使用`jdk1.8`版本以上。

@@ -12,7 +14,7 @@ ### 1.4.2 Python安装 -在DOC命令行窗口输入python出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的python版本需要使用python2.7版本以上。 +在`DOC`命令行窗口输入`Python`出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的`Python`版本需要使用`python2.7`版本以上。

@@ -22,7 +24,8 @@ ### 1.4.3 scala安装 -本教程所使用的python版本推荐使用scala2.11.x版本。 +本教程所用`Spark`版本推荐使用`scala2.11.x`版本。 + 打开官网下载地址 下载对应安装包。 下载页面的底部点击如下所示红框处即可下载。 @@ -33,7 +36,7 @@ -解压配置环境变量,在DOC命令行窗口输入scala出现下图所示即表示已经安装成功。 +解压配置环境变量,在`DOC`命令行窗口输入`scala`出现下图所示即表示已经安装成功。

@@ -46,7 +49,7 @@ 到`Spark`官网:下载地址 下载 `Hadoop`版本为`2.7`,`Spark`版本为`2.3.4`的`spark`安装包。 -解压配置环境变量,在DOC命令行窗口输入spark-shell出现下图所示即表示已经安装成功(图示报错不影响spark运行,该报错表示未安装hadoop)。 +解压配置环境变量,在`DOC`命令行窗口输入`spark-shell`出现下图所示即表示已经安装成功(图示报错不影响`Spark`运行,该报错表示未安装`Hadoop`)。

@@ -57,7 +60,7 @@ ### pycharm环境安装 -1.打开pycharm,创建一个项目,如下图; +1.打开`pycharm`,创建一个项目,如下图;

@@ -65,10 +68,10 @@ -2.添加pyspark.zip和py4j包到项目中(这两个文件在spark安装目录\python\lib中) +2.添加`pyspark.zip`和`py4j`包到项目中(这两个文件在`Spark`安装目录`\python\lib`中) -依次点击 file >> setting >> Project:pspark >> Project Structure +依次点击:`file >> setting >> Project:pspark >> Project Structure`

@@ -76,7 +79,7 @@ -3.新建一个python文件,执行以下代码,输出了你的spark版本无报错即安装成功了。 +3.新建一个`python`文件,执行以下代码,输出了你的`Spark`版本无报错即安装成功了。 ``` from pyspark.sql import SparkSession @@ -91,3 +94,7 @@ print(spark.version) ``` + +

+ +

\ No newline at end of file