spark中安装GraphFrames
GraphX是基于RDD的图处理API,在Python中无法使用。但是在pyspark中可以使用GraphFrames,GraphFrames是基于DataFrame的图处理API,支持Scala、JAVA以及Python语言。下面是GraphFrames的安装及使用方法:
一、GraphFrames的安装
GraphFrames的官网地址:graphframes (spark-packages.org)
官网推荐安装命令:
$SPARK_HOME/bin/spark-shell --packages graphframes:graphframes:0.8.2-spark2.4-s_2.11
注意:GraphFrames的版本要和你的环境中Spark的版本一致!
另外,还有一种用pip安装的方式:
pip install graphframes
注意:该方式还需要将graphframes对应的jar包安装到spark下的jars包文件中。如果不安装该jar包,在使用graphframes会报错:Py4JJavaError: An error occurred while calling o327.loadClass.java.lang.ClassNotFoundException:org.graphframes.GraphFramePythonAPI
二、GraphFrames的简单使用
edges=sc.textFile(r'/Users/sherry/Downloads/edges') edges=edges.map(lambda x:x.split('\t')) edges_df=spark.createDataFrame(edges,['src','dst']) nodes=sc.textFile(r'/Users/sherry/Downloads/nodes') nodes=nodes.map(lambda x:[x]) nodes_df=spark.createDataFrame(nodes,['id']) graph=GraphFrame(nodes_df, edges_df)
注意以下几点:
- GraphFrames(v,e)中的顶点v和边e必须都是DataFrame;
- v代表节点,其对应的DataFrame中必须有名叫“id”的列;
- e代表边,其对应的DataFrame中必须有名叫“src”和“dst”的列;
2.1 节点的度、入度和出度操作
graph.degrees
graph.inDegrees
graph.outDegrees
2.2 过滤节点和边形成新的图
#抽取原图中有顶点编号小于5000的点发出的边组成的图 g1=graph.filterEdges(func.expr('int(src)')<5000) #抽取原图中顶点编号小于5000的所有的点组成的图 g2=graph.filterVertices(func.expr('int(id)')<5000)
filterEdges()和filterVertices()方法中的过滤条件condition会分别与graph.edges、graph.vertices关联起来。
2.3 删除图中孤立的点
g3=g2.dropIsolatedVertices()
2.4 广度优先搜索(内置算法)
bfs():按广度优先搜索算法查找从源点到目标节点的路径。
vertices=[(1,'A'),(2,'B'),(3,'C'),(4,'D'), (5,'E'),(6,'F'),(7,'G'),(8,'H'),(9,'I')] edges=[(1,2),(1,6),(2,3),(2,7),(2,9),(3,4),(3,9), (4,5),(4,7),(4,8),(4,9),(5,6),(5,8),(7,6),(7,8)] vertices=spark.createDataFrame(vertices,['id','name']) edges=spark.createDataFrame(edges,['src','dst']) graph=GraphFrame(vertices, edges) root=graph.bfs('id=1','id=4')