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`中有一个重要概念,所有的边都有一个方向,那么图就是有向图,如果忽略边的方向,就是无向图。 **有环图和无环图** + 有环图是包含循环的,一系列顶点构成一个环。无环图没有环。如果不关心终止条件,算法可能永远在环上执行,无法退出。 -![avatar](/image/环图.png) + +

+ +

**其他常用术语** @@ -36,7 +40,10 @@ ### 4.1.3 Spark Graphx 定义图结构 假设我们要使用`Graphx`项目构造一个由军事补给站组成的属性图。顶点属性包含`ID`和补给站名称,各顶点间的关系由线路构成。生成其属性图关系如下: -![avatar](/image/补给图.png) + +

+ +

顶点属性数据: ``` 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`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资(参照上一章节图结构)。 -![avatar](/image/补给图.png) + +

+ +

示例代码如下: @@ -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`开发了一组基础功能操作。目前仍在不断扩充图算法,用来简化图计算的分析任务。 -![avatar](/image/Graphx.png) +

+ +

本章节主要介绍`GraphX`的核心抽象模型—属性图,并通过实例介绍如何构造一个图、如何使用图计算计算最短路径。