python - 使用 Python 将保存的 `graphdata` 加载回 redisgraph 实例时出现问题

标签 python redis redisgraph

我想使用 redisgraph-py 将保存的图加载回 Graph 对象。如何使用存储为 graphdata 类型的 redis-py 加载数据?

我正在运行 redisgraph docker 镜像,并且可以毫无问题地查看键之间的图形。我是 redis 的新手,试图只使用 r.get('random') 加载保存的图形,但我从顶部答案中看到 here我需要使用正确的方法通过 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) 必须通过发出查询来检索所有节点:

匹配 (n) 返回 n

并从每个表单创建一个 redisgraph-py Node 对象,此外,它还必须发出第二个查询来检索所有关系

匹配 (n)-[r]->(m) 返回 n,r,m

并从每个创建一个 redisgraph-py 边缘对象。

我认为如果我们这样做,那么实现类似于 NetworkX 的接口(interface)/框架是有意义的.

关于python - 使用 Python 将保存的 `graphdata` 加载回 redisgraph 实例时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986914/

相关文章:

redis - StackExchange.Redis 的 SETNX 超时

python - Telnet输出解析

python - 如何在 Python 中设置一个变量大于另一个变量?

Python 类 : Why can't I use the method len() inside __eq__(self, 其他)?

ruby-on-rails - 如何在 Rails 中更改 redis amazon elasticache 的 maxmemory-policy?

redis - 如何在 redis 图中存储分层数据并从中检索子树?

python - 对 tensorflow 中的张量列表求和

lua - 如何从 Redis 中的脚本调用脚本?

redisgraph - (错误)RedisGraph 中的 ERR 未知命令 'GRAPH.QUERY'

redis - 如何防止重复图中的数据重复?