本文主要阐述用python结合spark做数据分析和绘制有向图

工作需要,需要计算各个节点的出度,入度,最终表现为有向图的形式

首先数据量比较大,这块对于各个数据的抽取和出入度计算采用spark来计算

因为使用的语言是python,所以这里用的是pysark的graphframe;Pysark是spark为python开发者提供的API。

 

graphframe是将spark中的graph算法统一到DataFrame接口的Graph操作接口,支持多种语言,可以供python使用。

 

安装配置环境

安装python包:首先需要个python 的package这里我们直接下载https://github.com/graphframes/graphframes

grameframe的源码,然后把中间的python目录放到我们的python三方库路径就可以

 

spark依赖:spark解析需要一个包graphframes:0.2.0-spark1.6-s_2.10

网址在(http://spark-packages.org/package/graphframes/graphframes),要根据自己的spark版本去选择合适的包

使用的话在自己的python脚本里面提交spark任务时候加上:

 

 

清楚自己可以调用那些接口

原来我有个毛病,就是啥问题都喜欢搜中文的,结果经常被坑,以后发现对于这种库要去了解,最有效的方式是1.直接看源码接口 2.硬着头皮看官方的英文文档

graphframe里面我们使用方式有:

1.先生成graph对象:

这里有两个变量,一个是顶点dataframe,一个是边dataframe

顶点的格式是:【id,name】

边的格式是【src,dst,”action”】

需要先将数据抽取成上面的格式再传入

 

2.可以调用的方法接口:

outDegree()所有节点的出度

inDegree()所有节点的入度

bsf()宽度优先搜索,查找节点的最短路径

pageRank()按照其他节点指向它的数目来排序,指向一个节点的越多,这个节点就越重要

vertice打印出顶点

edges打印出边

 

具体使用

我们这里只需要计算出入度和出度

所以直接构造顶点和边的dataframe然后输入即可

g = dataframe.GraphFrame(vertices,edges)

g.inDegree()

g.outDegree()

 

 

画图

我们需要将自己的图用一个具体的有向带权图表示出来

这里选用的python的networkx

网上搜的说python里面这个画图不错,但是其实实用一下觉得这个很一般,也就是自己凑合着能看了

帖张最后的图,我这是网络链接图

图中粗线就是箭头的意思,这个真的只能自己人看看,要高大上的还要另想办法

如果有更好的方法和建议欢迎联系我,多谢指导

点击查看更多spark内容!

源链接

Hacking more

...