如何解决Neo4j 加载 csv 很长时间
大家好,Stackoverflow,
我有一个简单的查询来加载 csv,但浏览器需要很长时间才能加载并且仍然显示加载标志。
这是我的查询:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED {rating:line.rating}]->(m)
RETURN u,m,r
我没有看到代码中的错误..
ratings_small.csv 有以下列:
userId movieId 评分时间戳
1 31 2.5 1260759144
1 1029 3 1260759179
1 1061 3 1260759182
1 1129 2 1260759185
1 1172 4 1260759205
有 100 004 条记录。
亲切的问候, 安娜
解决方法
我相信您在 :User(name) 和 :Movie(movieId) 上都没有索引。
执行以下两个查询并重试 LOAD CSV 命令,它应该会在几秒钟内导入它:
CREATE CONSTRAINT ON (u:User) ASSERT u.name IS UNIQUE;
CREATE CONSTRAINT ON (m:Movie) ASSERT m.moveId IS UNIQUE;
其次,我假设用户只对电影评分一次,因此该关系的 MERGE 不必与属性发生,您可以像这样更改查询:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u,m,r
为了避免 Neo4j 尝试在一个事务中处理完整的 CSV,您可以像这样specify the batch size of transactional operations(以避免内存问题):
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u,r
最后,我怀疑您是否有任何应用程序甚至 Neo4j 浏览器可以一次可视化所有内容,因此我不会从 LOAD CSV 查询中返回任何内容:
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。