首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将社交网络关系csv (dict )文件导入neo4j图形数据库?

如何将社交网络关系csv (dict )文件导入neo4j图形数据库?
EN

Stack Overflow用户
提问于 2016-10-03 23:25:01
回答 1查看 294关注 0票数 1

我已经知道如何将CSV文件导入neo4j图形数据库,但我发现它们都位于以下列的固定编号中:

id1,id2,id3,id4,id5 id2,id2,id3,id4,id5 id3,id2,id3,id4,id5

但是我有一个描述人与人之间关系的可变列CSV文件。看起来是这样的:

id1,id2,id3,id4,id5 id2,id2,id3,id4,id5,id6,id7 id3,id2,id3

这意味着id1人遵循id2,id3,id4,id5,id2 person跟随id2,id3,id4,id5,id6,id7。

而且这个文件很大(大约6Gb),我应该如何将它导入neo4j?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 01:07:33

以下是关于如何使用Cypher LOAD CSV子句导入的一些提示。要处理真正大的数据导入任务,您可能需要查看http://neo4j.com/docs/operations-manual/current/tutorial/import-tool/工具。

处理不同数量的列不是问题,因为您可以将每个CSV文件行视为项的集合。

您应该通过CSV文件2次导入您的数据。在第一遍中,创建所有Person节点。在第二次传递中,匹配适当的节点,然后在它们之间创建关系。为了大大加快第二次传递的速度,您应该首先创建一个索引或一个唯一性约束 (这将为您创建一个索引),以便通过ID匹配Person节点。

我假定:

  • 在每个Person的CSV文件中有一行,每一行的第一列都具有此人的唯一ID。
  • 如果Person行不跟随任何人,则该行将只有一列。
  • 您的neo4j模型如下所示: (p1:Person {id: 123})->(p2:Person {id: 234})

首先,创建一个唯一性约束:

代码语言:javascript
复制
CREATE CONSTRAINT ON (p:Person) ASSERT p.id IS UNIQUE;

然后,使用CSV文件的第一列中的in创建Person节点。如果第1列中碰巧有任何重复的if,我们使用MERGE来确保LOAD不中止(由于唯一性约束)。如果您确信没有重复If,则可以使用CREATE,这应该更快。为了避免内存耗尽,我们一次处理并提交10000行:

代码语言:javascript
复制
USING PERIODIC COMMIT 10000
LOAD CSV FROM "file:///varying.csv" AS row
MERGE (:Person {id: row[0]});

最后,在适当的Person节点之间创建关系。这个查询使用USING INDEX提示来鼓励Cypher利用索引(由唯一性约束自动创建)快速找到合适的Person节点。同样,为了避免内存耗尽,我们一次处理10000行:

代码语言:javascript
复制
USING PERIODIC COMMIT 10000
LOAD CSV FROM "file:///varying.csv" AS row
WITH row[0] AS pid1, row[1..] AS followed
UNWIND followed AS pid2
MATCH (p1:Person {id: pid1}), (p2:Person {id: pid2})
USING INDEX p1:Person(id)
USING INDEX p2:Person(id)
MERGE (p1)-[:FOLLOWS]->(p2);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39841928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档