使用CSV填充Neo4j

4

我很新于Neo4j。我是这个图形数据库的学习者。我需要将一个csv文件加载到Neo4j数据库中。我尝试了两天,但找不到读取csv文件并导入到Neo4j的好资料。请给我提供一个示例代码或博客,来帮助我读取csv文件并导入到Neo4j。

例如:如果我有一个以这种方式组织的csv文件,我们该如何将其读取到Neo4j中?

id  name    language
1   Victor Richards West Frisian
2   Virginia Shaw   Korean
3   Lois Simpson    Belarusian
4   Randy Bishop    Hiri Motu
5   Lori Mendoza    Tok Pisin
5个回答

4
你可能想尝试https://github.com/sroycode/neo4j-import,它可以直接从一对CSV文件中填充数据(条目必须用逗号分隔)。构建方法如下:(需要Maven)
sh build.sh

节点文件必须包含一个强制性的id字段和其他任何你喜欢的字段。
NODES.txt
id,name,language
1,Victor Richards,West Frisian
2,Virginia Shaw,Korean
3,Lois Simpson,Belarusian

关系文件必须包含三个强制字段:from、to和type。假设您有一个age字段(长整型)和一个info字段,关系文件将如下所示:

RELNS.txt
from,to,type,age@long,info
1,2,KNOWS,10,known each other from school
1,3,CLUBMATES,5,member of country club

运行中:

sh run.sh graph.db NODES.txt RELNS.txt

会在当前文件夹中创建graph.db,您可以将其复制到neo4j数据文件夹中。

注意: 如果您使用的是1.6.*之后的neo4j版本,请在conf/neo4j.properties中添加此行

allow_store_upgrade = true

玩得开心。


3

看看Michael最近的实验,http://jexp.de/blog/2012/10/parallel-batch-inserter-with-neo4j/ - Peter Neubauer

2
“没有通用的方法可以将CSV数据加载到Neo4j中,因为源数据结构和目标数据结构不同:CSV数据是表格形式的,而Neo4j保存图形数据。”
“为了实现这样的导入,您需要添加一个单独的步骤,将您的表格数据转换为某种图形形式(例如树形结构),然后才能将其加载到Neo4j中。以树形结构为例,下面的页面展示了如何将XML数据转换为Cypher语句,然后可以直接执行该语句来加载到Neo4j实例中。”

http://geoff.nigelsmall.net/xml2graph/

如果这个工具有帮助的话,请随意使用(请记住它只能处理小文件),但这当然需要您先将CSV转换为XML。祝好!Nigel

1
非常棒的工具。很想看到它在大数据集上的运作 ;) - Ricardo Saporta
我最近为py2neo添加了选项,以加载XML(http://book.py2neo.org/en/latest/geoff.html#module-functions)。这本质上是上面xml2graph页面的Python重写。 - Nigel Small
非常酷。我会去查看的。 - Ricardo Saporta
基本上,Neo4j是如此新颖,以至于您必须编写自己的CSV导入程序? - Kebman

1

对于neo4j,可能没有已知的CSV导入器,您必须自己导入:

我通常通过gremlin的g.loadGraphML()函数自己完成导入。 http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-load-a-sample-graph

我使用一些外部脚本将数据解析为XML语法并加载特定的XML文件。您可以在此处查看语法: https://raw.github.com/tinkerpop/gremlin/master/data/graph-example-1.xml 解析100MB文件需要几分钟。

在您的情况下,您需要创建一个简单的二分图,其中顶点由用户和语言组成,并且边缘为“说话”。如果您懂一些编程,那么请创建具有参数idname用户节点| 具有参数name的唯一 语言节点|关系,您需要将每个用户与特定的语言连接起来。请注意,用户可以是重复的,而语言则不能。

0

我认为你的问题太泛泛了。你的csv文件包含什么?csv文件内容的逻辑意义可以变化很大。例如,两列ID,它们代表相互连接的实体。

3921  584
831   9891
3841  92
...

在这种情况下,您可以编写一个BatchInserter代码片段,以更快地导入它,请参见http://docs.neo4j.org/chunked/milestone/batchinsert.html

或者,您可以使用常规GraphDatabaseService进行导入,每个事务大小为几千个插入以提高性能。请参阅如何设置和使用图形数据库http://docs.neo4j.org/chunked/milestone/tutorials-java-embedded.html


嗨,请检查上面的文件。我已经更新了示例CSV文件。我已经阅读了您提供的链接,但我无法理解如何读取CSV文件。 - Navyah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接