使用 Python 将已保存的“graphdata”加载回 redisgraph 实例时出现问题
Problem loading saved `graphdata` back into a redisgraph instance with Python
我想使用 redisgraph-py 将保存的图加载回 Graph 对象。如何使用存储为 graphdata
类型的 redis-py 加载数据?
我是 运行 重新分配的 docker 图像,在查看键之间的图形时没有任何问题。我是 redis 的新手,试图只使用 r.get('random')
来加载保存的图形,但我从顶部答案 中看到我需要使用正确的方法来提取正确类型的值redis-py.
from io import BytesIO
from pprint import pprint
import numpy as np
import redis
from redisgraph import Node, Edge, Graph
def _array2bytes(arr):
with BytesIO() as b:
np.save(b, arr)
return b.getvalue()
def _bytes2array(byts):
return np.load(BytesIO(byts))
def _add_nodes(r, graph, n_nodes):
nodes = []
for k in range(n_nodes):
n = Node(label="node")
graph.add_node(n)
nodes.append(n)
_id = n.alias
feat = np.random.rand(1,100,7,7)
feat_bytes = _array2bytes(feat)
r.set(_id, feat_bytes)
return nodes
def _add_edges(nodes, graph, edge_prob):
edges = []
for k, node0 in enumerate(nodes):
for kk, node1 in enumerate(nodes):
if np.random.rand() < edge_prob:
edge = Edge(node0, "adjacent_to", node1)
graph.add_edge(edge)
edges.append(edge)
return edges
def _create_random_graph(r, graphname="random", n_nodes=1000, edge_prob=0.1):
redis_graph = Graph(graphname, r)
nodes = _add_nodes(r, redis_graph, n_nodes)
edges = _add_edges(nodes, redis_graph, edge_prob)
return redis_graph
def _save_graph():
r = redis.Redis(host='localhost', port=6379)
g = _create_random_graph(r)
g.commit()
return r
def _load_graph(r):
# The graph is saved under the key 'random'
print(r.type('random'))
def _main():
r = _save_graph()
_load_graph(r)
if __name__ == "__main__":
_main()
我看到了 graphdata
,但我不知道如何使用 redis-py 或 redisgraph-py 加载此类数据。在文档中也找不到任何内容。
目前 redisgraph-py 无法从包含图形的 Redis 键重新创建 Python 图形对象。
要实现这一点,模块 (redisgraph-py) 必须通过发出查询来检索所有节点:
MATCH (n) RETURN n
并从每个表单创建一个 redisgraph-py Node 对象,此外,它还必须发出第二个查询来检索所有关系
MATCH (n)-[r]->(m) RETURN n,r,m
并从每个创建一个 redisgraph-py 边缘对象。
我认为如果我们这样做,那么实现类似于 NetworkX 的接口/框架是有意义的。
我想使用 redisgraph-py 将保存的图加载回 Graph 对象。如何使用存储为 graphdata
类型的 redis-py 加载数据?
我是 运行 重新分配的 docker 图像,在查看键之间的图形时没有任何问题。我是 redis 的新手,试图只使用 r.get('random')
来加载保存的图形,但我从顶部答案
from io import BytesIO
from pprint import pprint
import numpy as np
import redis
from redisgraph import Node, Edge, Graph
def _array2bytes(arr):
with BytesIO() as b:
np.save(b, arr)
return b.getvalue()
def _bytes2array(byts):
return np.load(BytesIO(byts))
def _add_nodes(r, graph, n_nodes):
nodes = []
for k in range(n_nodes):
n = Node(label="node")
graph.add_node(n)
nodes.append(n)
_id = n.alias
feat = np.random.rand(1,100,7,7)
feat_bytes = _array2bytes(feat)
r.set(_id, feat_bytes)
return nodes
def _add_edges(nodes, graph, edge_prob):
edges = []
for k, node0 in enumerate(nodes):
for kk, node1 in enumerate(nodes):
if np.random.rand() < edge_prob:
edge = Edge(node0, "adjacent_to", node1)
graph.add_edge(edge)
edges.append(edge)
return edges
def _create_random_graph(r, graphname="random", n_nodes=1000, edge_prob=0.1):
redis_graph = Graph(graphname, r)
nodes = _add_nodes(r, redis_graph, n_nodes)
edges = _add_edges(nodes, redis_graph, edge_prob)
return redis_graph
def _save_graph():
r = redis.Redis(host='localhost', port=6379)
g = _create_random_graph(r)
g.commit()
return r
def _load_graph(r):
# The graph is saved under the key 'random'
print(r.type('random'))
def _main():
r = _save_graph()
_load_graph(r)
if __name__ == "__main__":
_main()
我看到了 graphdata
,但我不知道如何使用 redis-py 或 redisgraph-py 加载此类数据。在文档中也找不到任何内容。
目前 redisgraph-py 无法从包含图形的 Redis 键重新创建 Python 图形对象。
要实现这一点,模块 (redisgraph-py) 必须通过发出查询来检索所有节点:
MATCH (n) RETURN n
并从每个表单创建一个 redisgraph-py Node 对象,此外,它还必须发出第二个查询来检索所有关系
MATCH (n)-[r]->(m) RETURN n,r,m
并从每个创建一个 redisgraph-py 边缘对象。
我认为如果我们这样做,那么实现类似于 NetworkX 的接口/框架是有意义的。