【问题标题】:How to load data from remote server into neo4j using python?如何使用 python 将数据从远程服务器加载到 neo4j?
【发布时间】:2017-04-10 10:46:31
【问题描述】:

我有两台服务器,一台用于 neo4j 存储图形数据,另一台服务器将运行 ETL 以每分钟将数据加载到 neo4j 中。

我目前的解决方案是:使用for循环为每个即将到来的数据项运行一个事务(基于py2neo),但是性能很慢,我也尝试在neo4j本地服务器中保存一个tmp csv文件,然后在 cypher 中使用 load csv 语法,它会大大提高性能,但我不知道如何从远程服务器加载 csv。

所以,我想知道的是,是否有办法将 dict/list/(pandas dataframe) 加载到 neo4j 中?就像在 python 脚本中加载 csv 进行批量导入一样? 我是neo4j的新手,非常感谢您的帮助。

【问题讨论】:

    标签: neo4j py2neo


    【解决方案1】:

    如果你想从远程服务器加载 CSV,你需要运行一个 simpleHTTPServer 或类似的东西来托管 HTTPServer 上的文件。然后你可以简单地使用

    LOAD CSV FROM "http://192.x.x.x/myfile.csv" as row

    另一方面,您可以从 pandas 数据框中导入文件。我创建了一个简单的脚本来计算线性回归梯度并将其保存回 neo4j

    from neo4j.v1 import GraphDatabase
    import pandas as pd
    import numpy as np
    driver = GraphDatabase.driver("bolt://192.168.x.x:7687", auth=("neo4j", "neo4j"))
    session = driver.session()
    
    def weekly_count_gradient(data):
        df = pd.DataFrame([r.values() for r in data], columns=data.keys())
        df["week"] = df.start.apply(lambda x: pd.to_datetime(x).week if pd.notnull(x) else None)
        df["year"] = df.start.apply(lambda x: pd.to_datetime(x).year if pd.notnull(x) else None)
        group = df.groupby(["week","year","company"]).start.count().reset_index()
        for name in group["company"].unique():
            if group[group["company"] == name].shape[0] >= 5:
                x = np.array([i[1] if i[0] == 2016 else i[1] + 52 for i in group[group.company == name][["year","week"]].values])
                y = group[group.company == name]["start"].values
                fit = np.polyfit(x,y,deg=1)     
                update = session.run("MATCH (a:Company{code:{code}}) SET a.weekly_count_gradient = toFLOAT({gradient}) RETURN a.code,{"code":name,"gradient":fit[0]})
    

    这里的关键是你运行一个带参数的查询,参数可以来自任何地方(list/dict/pandas)

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多