2014-05-01 58 views
1

我不确定这是否已被回答,但在这里。 我有一个Neoj DB已经填充了可以说100k节点标记为人。 我想导入这些人创建的活动并将它们标记为活动。 我有一个csv约1000万活动,我想导入到Neo4j。在java代码中使用密码进行批量插入的最佳方法

以下代码是我创建的Cypher语句,它可以查找与活动关联的用户,创建活动节点并在用户和活动之间建立关系。

来处理这种情况的方法是低于

public void addActivityToGraph(List<String> activities) { 

    Map<String, Object> params = new HashMap<>(); 

    for (String r : activities) { 
     String[] rd = r.split(";"); 
     log.info("Row count: " + (rowCount + 1) + "| " + r); 
     log.info("Row count: " + (rowCount + 1) 
       + "| Array Length: " + rd.length); 

     Map<String, Object> props = new HashMap<>(); 

     props.put("activityid", Long.parseLong(rd[0])); 
     props.put("objecttype", Integer.parseInt(rd[1])); 
     props.put("objectid", Integer.parseInt(rd[2])); 
     props.put("containertype", Integer.parseInt(rd[3])); 
     props.put("containerid", Integer.parseInt(rd[4])); 
     props.put("activitytype", Integer.parseInt(rd[5])); 
     props.put("creationdate", Long.parseLong(rd[7])); 

     params.put("props", props); 
     params.put("userid", Integer.parseInt(rd[6])); 

     try (Transaction tx = gd.beginTx()) { 
      //engine is RestCypherQueryEngine 
      engine.query("match (p:Person{userid:{userid}}) create unique (p)-[:created]->(a:Activity{props})", params); 

      params.clear(); 
      tx.success(); 

     } 
    } 

} 

虽然这个工程,我敢肯定,因为这个过程需要一整天的时间做完,我不使用工具的正确组合。必须有一个更简单的方法。我看到很多带有批处理API的文档,但我没有看到任何与我在这里的情况(找到一个已经存在的用户,创建用户和新活动之间的关系) 我欣赏所有我可以得到的帮助这里。

谢谢。

回答

1

There are many ways to do batch import进入Neo4j。

如果您使用的是2.1里程碑版本,则有a load CSV option in cypher

如果你实际上已经有结构化的CSV,我建议不要写一堆java代码来做。探索可用的工具,并从那里去。

使用新的密码选项,它可能看起来像这样。密码查询可以在neo4j shell中运行,也可以通过java来运行。

LOAD CSV WITH HEADERS FROM "file:///tmp/myPeople.csv" AS csvLine 
MERGE (p:Person { userid: csvLine.userid}) 
MERGE (a:Activity { someProperty: csvLine.someProperty }) 
create unique (p)-[:created]->(a) 
+0

感谢您的支持。但我在2.0.2版本上运行,升级选项尚未提供给我。任何其他想法?我似乎无法将我的头围绕着大量的选项,但似乎并未解决我的使用案例,但这种方法非常接近。只是错误的版本。 – Jome

+0

我发布的第一个链接中有许多其他的想法和选项。他们都在早期版本(包括2)上工作。所以检查一下。有一个用于从Excel加载CSV的选项,可以选择将CSV转换为密码,然后以这种方式进行批量加载。 github上也有专门的工具可以用来执行批量csv加载 – FrobberOfBits

+0

请参阅以下链接,了解将CSV加载到neo4j中的程序,不需要2.1:https://github.com/jexp/batch-import – FrobberOfBits

0

通过线路上的其余查询引擎没有交易。你可以使用配料,但我认为这是比较明智​​的使用像我的Neo4j壳工具加载CSV文件

安装他们所列出here,然后用

import-cypher -i activities.csv MATCH (p:Person{userid:{userid}}) CREATE (p)-[:created]->(a:Activity{activityid:{activityid}, ....}) 

确保对于你的Person(用户标识符)和:Activity(活动标识符)有索引/约束来快速进行匹配和合并。

相关问题