我使用python graphframes在一个大数据集上执行计算。本质上,我将数据帧转换成一个图,其中每个顶点是数据帧中的一行,每个边表示我要执行的计算。这些计算是基于顶点的,使用目标/给定顶点的每个传出边的计数进行计算
例如,要确定给定v1-[e]->v2
(其中v1
表示我正在执行此计算的目标行,[e]
表示计算类型,v2
表示我可能包含在此计算中的潜在行)的某个计算,我通过对初始数据帧中的行值应用一些过滤器来确定是否要使用v2
。如果v2
与计算条件不匹配,我将从v1
中删除边
大致上这看起来像:
def filter_graph(graph):
calculations = ['calc1', 'calc2']
df = None
for c in calculations:
sub_graph = graph.filterVertices('calculation = c').filterEdges('calculation = c')
df = sub_graph
.find("(a)-[ab]->(b)")
.filter("""
b.some_attr = a.some_attr ...
""")
return df
但是,如果我将行数据从v1/a
和v2/b
卸载到边缘并使用本机graphframes函数filterEdges
,这种计算会更快吗?这可能吗
比如:
def filter_graph_opt(graph):
calculations = ['calc1', 'calc2']
df = None
for c in calculations:
sub_graph = graph \
.filterVertices('calculation = c') \
.filterEdges('calculation = c') \
.filterEdges("""
dst.some_attr = src.some_attr
""")
return df
目前没有回答
相关问题 更多 >
编程相关推荐