graphframes是一个基于PySpark DataFrames的网络分析工具。以下代码是子图示例教程的修改版本:
from graphframes.examples import Graphs
import graphframes
g = Graphs(sqlContext).friends() # Get example graph
# Select subgraph of users older than 30
v2 = g.vertices.filter("age > 30")
g2 = graphframes.GraphFrame(v2, g.edges)
人们会期望新的图g2
与原始图g
相比包含更少的节点和更少的边,然而,情况并非如此:
print(g.vertices.count(), g.edges.count())
print(g2.vertices.count(), g2.edges.count())
给出输出:
(6, 7)
(7, 4)
很明显,生成的图形包含不存在的节点的边。更令人不安的是g.degrees
和g2.degrees
是相同的。这意味着至少有一些图形功能忽略了节点信息。是否有一种好方法可以确保GraphFrame
只使用提供的nodes
和edges
参数的交集创建图形?
4条答案
按热度按时间cs7cruho1#
我用来绘制图形框架的一个方法是使用motifs:
虽然这看起来更复杂,可能需要更长的运行时间,但对于更复杂的图形查询,这可以很好地作为一个单独的实体与图形框架交互,而不是作为单独的顶点和边。因此,过滤顶点也会影响图形框架中剩下的边。
pinkon5k2#
有意思..我看不出结果:
GraphFrames到目前为止还没有检查图形是否有效--即所有的边都连接到顶点等等,在图形构造的时候。但是在过滤器之后顶点的数量是否正确?
9rbhqvlz3#
我的变通方法可能不是完美的,但它们对我很有效。
我得到的问题陈述:具有节点的过滤集合filtered_nodes,我们只希望具有来自原始图的包括来自filtered_nodes的节点的边。
有人有更好的办法吗?我很乐意去看看。
hgc7kmma4#
我建议使用dropIsolatedVertices()。