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
diff --git a/chapter4/4.1SparkGraphX定义图结构.md b/chapter4/4.1SparkGraphX定义图结构.md
index c8b9325..0a3dd4f 100644
--- a/chapter4/4.1SparkGraphX定义图结构.md
+++ b/chapter4/4.1SparkGraphX定义图结构.md
@@ -19,9 +19,13 @@
> `GraphX`中有一个重要概念,所有的边都有一个方向,那么图就是有向图,如果忽略边的方向,就是无向图。
**有环图和无环图**
+
有环图是包含循环的,一系列顶点构成一个环。无环图没有环。如果不关心终止条件,算法可能永远在环上执行,无法退出。
-
+
+
+
+
**其他常用术语**
@@ -36,7 +40,10 @@
### 4.1.3 Spark Graphx 定义图结构
假设我们要使用`Graphx`项目构造一个由军事补给站组成的属性图。顶点属性包含`ID`和补给站名称,各顶点间的关系由线路构成。生成其属性图关系如下:
-
+
+
+
+
顶点属性数据:
```
diff --git a/chapter4/4.2SparkGraphX计算生成最短路径.md b/chapter4/4.2SparkGraphX计算生成最短路径.md
index 5e5bb0c..32db037 100644
--- a/chapter4/4.2SparkGraphX计算生成最短路径.md
+++ b/chapter4/4.2SparkGraphX计算生成最短路径.md
@@ -65,9 +65,12 @@
## 4.2.2 使用 GraphX 计算生成最短路径
-之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资。(参照上一章节图结构)
+之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资(参照上一章节图结构)。
-
+
+
+
+
示例代码如下:
@@ -110,9 +113,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 )))
@@ -148,7 +154,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`。
示例代码如下:
diff --git a/chapter4/4Spark图数据计算简介.md b/chapter4/4Spark图数据计算简介.md
index 36762c1..6261074 100644
--- a/chapter4/4Spark图数据计算简介.md
+++ b/chapter4/4Spark图数据计算简介.md
@@ -1,7 +1,9 @@
# 第四章:Spark图数据计算简介
`GraphX`是`Spark`的分布式图处理框架。`GraphX`通过引入属性图:顶点和边均有属性的有向多重图,来扩充`Spark`的`RDD`。为了支持这种图计算,`GraphX`开发了一组基础功能操作。目前仍在不断扩充图算法,用来简化图计算的分析任务。
-
+
+
+
本章节主要介绍`GraphX`的核心抽象模型—属性图,并通过实例介绍如何构造一个图、如何使用图计算计算最短路径。