图转换¶
在GraphScope中,可以从GraphScope图对象创建nx.Graph或nx.DiGraph。
我们采用写时复制转换策略来从GraphScope图创建这些对象。
也就是说,当使用GraphScope图对象初始化nx.Graph或nx.DiGraph时,
我们不会立即将箭头属性图转换为动态属性图,
而是直接将箭头属性图托管在nx.Graph或nx.DiGraph对象中。
该图可以正常报告图信息并运行算法。
当图需要进行修改操作时,箭头属性图才会转换为动态属性图,这就是写时复制转换策略。
以下是一个展示写时复制转换的示例。
注意:nx.Graph 和 nx.DiGraph 不支持从包含平行边的 GraphScope 多重图中创建。如果输入图是多重图,将会抛出 NetworkXError 错误。
>>> # first create a labeled graphscope graph
>>> graph = graphscope.g()
>>> graph.add_vertices("v_0.csv", label="v0")
>>> graph.add_vertices("v_1.csv", label="v1")
>>> graph.add_edge("e.csv", label="e", src_label="v0", dst_label="v1")
>>> # then we init a nx.Graph with graph, here we set v0 as default vertex label
>>> G = nx.Graph(graph, default_label="v0") # G actually hosts a arrow property graph
>>> # we can report info of G or run algorithm without converting to dynamic property graph
>>> print(G.nodes)
[0, ("v1", 1)]
>>> nx.builtin.pagerank(G)
>>> # when comes to the modification, hosted arrow property graph convert to dynamic property graph
>>> G.add_node(1)
>>> print(G.nodes)
[0, 1, ("v1", 1)]
- graphscope.nx.Graph.__init__(self, incoming_graph_data=None, default_label=None, **attr)¶
使用图、边、名称或图属性初始化一个图
- Parameters:
incoming_graph_data (输入图数据 (可选, 默认: None)) - 用于初始化图的数据。如果为None(默认值)则创建一个空图。数据可以是边列表、任何NetworkX图对象或任何GraphScope图对象。如果安装了相应的可选Python包,数据也可以是2D NumPy数组或SciPy稀疏矩阵
default_label (默认节点标签 (可选, 默认: "_")) – 如果incoming_graph_data是GraphScope图对象,default_label表示可以直接通过id访问该标签的节点,其他标签节点需要使用(label, id)来访问。
attr (关键字参数,可选(默认=无属性)) - 以键值对形式添加到图中的属性。
另请参阅
convert示例
>>> G = nx.Graph() # or DiGraph >>> G = nx.Graph(name='my graph') >>> e = [(1, 2), (2, 3), (3, 4)] # list of edges >>> G = nx.Graph(e)
可以分配任意的图属性键值对(key=value)
>>> G = nx.Graph(e, day="Friday") >>> G.graph {'day': 'Friday'}
由GraphScope图对象创建
>>> g = graphscope.g(directed=False) # if transform to DiGraph, directed=True >>> g.add_vertices("person.csv", label="person").add_vertices("comment.csv", label="comment").add_edges(...) >>> G = nx.Graph(g, default_label="person") # or DiGraph
- graphscope.nx.Graph._convert_arrow_to_dynamic(self)¶
尝试将托管图从arrow_property转换为dynamic_property。
备注
该方法由修改和图视图方法隐式调用。