xlc 6 years ago
commit d0377e7cd6

@ -1,8 +1,10 @@
## 1.4 Windows+Pycharm搭建Python版Spark开发环境 ## 1.4 Windows+Pycharm搭建Python版Spark开发环境
开发`Spark`程序的时候,如果每次都把代码提交到集群上运行,想必会非常麻烦,那么搭建一个`windows`版的开发环境是非常有必要的。
### 1.4.1 JDK安装 ### 1.4.1 JDK安装
在DOC命令行窗口输入java -version出现下图所示即表示已经安装成功。如未安装成功请自行百度。本教程所使用的spark版本需要使用jdk1.8版本以上。 `DOC`命令行窗口输入`java -version`出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的`Spark`版本需要使用`jdk1.8`版本以上。
<p align="center" > <p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/458936" alt="" height="100%" width="100%" /> <img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/458936" alt="" height="100%" width="100%" />
@ -12,7 +14,7 @@
### 1.4.2 Python安装 ### 1.4.2 Python安装
DOC命令行窗口输入python出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的python版本需要使用python2.7版本以上。 `DOC`命令行窗口输入`Python`出现下图所示即表示已经安装成功。如未安装成功,请自行百度。本教程所使用的`Python`版本需要使用`python2.7`版本以上。
<p align="center" > <p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/458940" alt="" height="100%" width="100%" /> <img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/458940" alt="" height="100%" width="100%" />
@ -22,7 +24,8 @@
### 1.4.3 scala安装 ### 1.4.3 scala安装
本教程所使用的python版本推荐使用scala2.11.x版本。 本教程所用`Spark`版本推荐使用`scala2.11.x`版本。
打开官网<a href="https://www.scala-lang.org/download/2.11.8.html" target="view_frame">下载地址 </a>下载对应安装包。 打开官网<a href="https://www.scala-lang.org/download/2.11.8.html" target="view_frame">下载地址 </a>下载对应安装包。
下载页面的底部点击如下所示红框处即可下载。 下载页面的底部点击如下所示红框处即可下载。
@ -33,7 +36,7 @@
解压配置环境变量在DOC命令行窗口输入scala出现下图所示即表示已经安装成功。 解压配置环境变量,在`DOC`命令行窗口输入`scala`出现下图所示即表示已经安装成功。
<p align="center" > <p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459087" alt="" height="100%" width="100%" /> <img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459087" alt="" height="100%" width="100%" />
@ -46,7 +49,7 @@
到`Spark`官网:<a href="https://archive.apache.org/dist/spark/spark-2.3.4/" target="view_frame">下载地址 </a> 下载 到`Spark`官网:<a href="https://archive.apache.org/dist/spark/spark-2.3.4/" target="view_frame">下载地址 </a> 下载
`Hadoop`版本为`2.7``Spark`版本为`2.3.4`的`spark`安装包。 `Hadoop`版本为`2.7``Spark`版本为`2.3.4`的`spark`安装包。
解压配置环境变量在DOC命令行窗口输入spark-shell出现下图所示即表示已经安装成功(图示报错不影响spark运行该报错表示未安装hadoop)。 解压配置环境变量,在`DOC`命令行窗口输入`spark-shell`出现下图所示即表示已经安装成功(图示报错不影响`Spark`运行,该报错表示未安装`Hadoop`)。
<p align="center" > <p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459186" alt="" height="100%" width="100%" /> <img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459186" alt="" height="100%" width="100%" />
@ -57,7 +60,7 @@
### pycharm环境安装 ### pycharm环境安装
1.打开pycharm创建一个项目如下图 1.打开`pycharm`,创建一个项目,如下图;
<p align="center" > <p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459196" alt="" height="100%" width="100%" /> <img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459196" alt="" height="100%" width="100%" />
@ -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`
<p align="center" > <p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459207" alt="" height="100%" width="100%" /> <img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459207" alt="" height="100%" width="100%" />
@ -76,7 +79,7 @@
3.新建一个python文件执行以下代码输出了你的spark版本无报错即安装成功了。 3.新建一个`python`文件,执行以下代码,输出了你的`Spark`版本无报错即安装成功了。
``` ```
from pyspark.sql import SparkSession from pyspark.sql import SparkSession
@ -91,3 +94,7 @@ print(spark.version)
``` ```
<p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/459543" alt="" height="100%" width="100%" />
</p>

@ -19,9 +19,13 @@
> `GraphX`中有一个重要概念,所有的边都有一个方向,那么图就是有向图,如果忽略边的方向,就是无向图。 > `GraphX`中有一个重要概念,所有的边都有一个方向,那么图就是有向图,如果忽略边的方向,就是无向图。
**有环图和无环图** **有环图和无环图**
有环图是包含循环的,一系列顶点构成一个环。无环图没有环。如果不关心终止条件,算法可能永远在环上执行,无法退出。 有环图是包含循环的,一系列顶点构成一个环。无环图没有环。如果不关心终止条件,算法可能永远在环上执行,无法退出。
![avatar](/image/环图.png)
<p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="../image/环图.png" alt="" height="80%" width="80%" />
</p>
**其他常用术语** **其他常用术语**
@ -36,7 +40,10 @@
### 4.1.3 Spark Graphx 定义图结构 ### 4.1.3 Spark Graphx 定义图结构
假设我们要使用`Graphx`项目构造一个由军事补给站组成的属性图。顶点属性包含`ID`和补给站名称,各顶点间的关系由线路构成。生成其属性图关系如下: 假设我们要使用`Graphx`项目构造一个由军事补给站组成的属性图。顶点属性包含`ID`和补给站名称,各顶点间的关系由线路构成。生成其属性图关系如下:
![avatar](/image/补给图.png)
<p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="../image/补给图.png" alt="" height="80%" width="80%" />
</p>
顶点属性数据: 顶点属性数据:
``` ```

@ -65,9 +65,12 @@
## 4.2.2 使用 GraphX 计算生成最短路径 ## 4.2.2 使用 GraphX 计算生成最短路径
之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资(参照上一章节图结构) 之前我们已经使用`GraphX`定义了图结构。假设我们的总站点为`1`号站点,现想从总站点派出`7`辆补给车运送军用物资给其它补给站点,需要我们对其道路进行规划,计算如何从起始点到目的地以最短距离运送我们的军用物资(参照上一章节图结构)
![avatar](/image/补给图.png)
<p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="../image/补给图.png" alt="" height="80%" width="80%" />
</p>
示例代码如下: 示例代码如下:
@ -110,9 +113,12 @@ initialGraph.pregel(
// 激活态的节点调用该方法发送消息 // 激活态的节点调用该方法发送消息
// 将上一个节点和当前节点的属性添加到array中。可以理解将迭代的节点都添加到array中 // 将上一个节点和当前节点的属性添加到array中。可以理解将迭代的节点都添加到array中
var array = new ArrayBuffer[Long]() var array = new ArrayBuffer[Long]()
println(edgeTriplet.srcAttr._1 +"|"+edgeTriplet.dstAttr._1)
array ++= edgeTriplet.srcAttr._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) { if(edgeTriplet.srcAttr._2 + edgeTriplet.attr < edgeTriplet.dstAttr._2) {
Iterator((edgeTriplet.dstId, (array,edgeTriplet.srcAttr._2 + edgeTriplet.attr ))) 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`。 由于`GraphX`基于`RDD API`,不支持`Python API`,那么我们想用`Python`做图计算的时候该怎么办呢?这时候,我们可以使用 `GraphFrames`定义图结构。该类库是构建在`DataFrame`之上,它既能利用`DataFrame`良好的扩展性和强大的性能,同时也为`Scala`、`Java`和`Python提`供了统一的图处理`API`。
示例代码如下: 示例代码如下:

@ -1,7 +1,9 @@
# 第四章Spark图数据计算简介 # 第四章Spark图数据计算简介
`GraphX`是`Spark`的分布式图处理框架。`GraphX`通过引入属性图:顶点和边均有属性的有向多重图,来扩充`Spark`的`RDD`。为了支持这种图计算,`GraphX`开发了一组基础功能操作。目前仍在不断扩充图算法,用来简化图计算的分析任务。 `GraphX`是`Spark`的分布式图处理框架。`GraphX`通过引入属性图:顶点和边均有属性的有向多重图,来扩充`Spark`的`RDD`。为了支持这种图计算,`GraphX`开发了一组基础功能操作。目前仍在不断扩充图算法,用来简化图计算的分析任务。
![avatar](/image/Graphx.png)
<p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="/image/Graphx.png" alt="" height="80%" width="80%" />
</p>
本章节主要介绍`GraphX`的核心抽象模型—属性图,并通过实例介绍如何构造一个图、如何使用图计算计算最短路径。 本章节主要介绍`GraphX`的核心抽象模型—属性图,并通过实例介绍如何构造一个图、如何使用图计算计算最短路径。

Loading…
Cancel
Save