java - 将社交网络数据加载到 Neo4J 中

标签 java graph neo4j cypher

我有一个类似于 Twitter 图表的数据集。数据的形式如下:

<user-id1> <List of ids which he follows separated by spaces>
<user-id2> <List of ids which he follows separated by spaces>
...

我想以单向图的形式对此进行建模,用密码语法表示为:

(A:Follower)-[:FOLLOWS]->(B:Followee)

同一用户可以在数据集中出现多次,因为他可能出现在多个人的好友列表中,并且他也可能将其好友列表作为数据集的一部分。这里的挑战是确保任何用户都没有重复的节点。如果用户在数据集中同时显示为 Follower 和 Followee,则节点的标签应具有这两个值,即 Follower:Followee。图中约有 980k 个节点,数据集大小为 1.4 GB。

我不确定 Cypher 的加载 CSV 是否可以在这里工作,因为数据集的每一行都有可变数量的列,因此无法编写查询来为每列生成节点。那么,将这些数据导入 Neo4j 而不创建任何重复项的最佳方法是什么?

最佳答案

我实际上对 friendster dataset 做了完全相同的事情,其格式与您的格式几乎相同。

许多 friend 的分隔符是“:”。

我在那里使用的查询是:

create index on :User(id);

USING PERIODIC COMMIT 1000
LOAD CSV FROM "file:///home/michael/import/friendster/friends-000______.txt" as line FIELDTERMINATOR ":"
MERGE (u1:User {id:line[0]})
;

USING PERIODIC COMMIT 1000
LOAD CSV FROM "file:///home/michael/import/friendster/friends-000______.txt" as line FIELDTERMINATOR ":"
WITH line[1] as id2
WHERE id2 <> '' AND id2 <> 'private' AND id2 <> 'notfound'
UNWIND split(id2,",") as id
WITH distinct id
MERGE (:User {id:id})
;

USING PERIODIC COMMIT 1000
LOAD CSV FROM "file:///home/michael/import/friendster/friends-000______.txt" as line FIELDTERMINATOR ":"
WITH line[0] as id1, line[1] as id2
WHERE id2 <> '' AND id2 <> 'private' AND id2 <> 'notfound'
MATCH (u1:User {id:id1})
UNWIND split(id2,",") as id 
MATCH (u2:User {id:id})
CREATE (u1)-[:FRIEND_OF]->(u2)
;

关于java - 将社交网络数据加载到 Neo4J 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25189692/

相关文章:

java - 验证命令行参数用户输入

Java流不将List的所有值放入HashMap

java - 如何使用 CSS 在 JavaFX2 中设置表格单元格的样式(不删除悬停/选择等)

swift - 用线连接网格中的点

python - 您如何设置 neo4j 以与 Google Compute Engine 一起工作?

java进程生成器: run program with user input from command line

database - 从充满数字的数据库创建图形或图表的软件包?

graph - 在一张图中绘制不同回归的边际效应

java - 对自定义插件的并发调用一次处理 1 个

kubernetes - 将数据导入 Neo4j Kubernetes 集群