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')

 

posted @ 2022-09-20 16:55  干了这瓶老干妈  阅读(530)  评论(0编辑  收藏  举报
Live2D