如何使用python将数据从远程服务器加载到neo4j?

如何使用python将数据从远程服务器加载到neo4j?,neo4j,py2neo,Neo4j,Py2neo,我有两台服务器,一台用于neo4j存储图形数据,另一台服务器每分钟运行ETL将数据加载到neo4j中 我目前的解决方案是:基于py2neo,使用for循环为每个即将到来的数据项运行事务,但性能非常慢,我还尝试在neo4j本地服务器中保存一个tmp csv文件,然后在cypher中使用load csv语法,这将大大提高性能,但我不知道如何从远程服务器加载csv 所以,我想知道的是,是否有办法将dict/list/pandas数据帧加载到neo4j中?就像用python脚本加载csv进行批量导入一样

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

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

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

如果您想从远程服务器加载CSV,您需要运行simpleHTTPServer或在HTTPServer上承载文件的类似工具。然后你可以简单地使用

从中加载CSVhttp://192.x.x.x/myfile.csv 作为一行

另一方面,您可以从数据帧导入文件。我创建了一个简单的脚本来计算线性回归梯度,并将其保存回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