龙空技术网

CSV文件数据导入Neo4j,以Mooper数据集为例 | 方华文档

方华Elton 77

前言:

此刻朋友们对“java读取csv文件并存储”大概比较讲究,我们都想要剖析一些“java读取csv文件并存储”的相关资讯。那么小编同时在网络上汇集了一些对于“java读取csv文件并存储””的相关文章,希望朋友们能喜欢,大家一起来了解一下吧!

你好,我是方华,一名数字化咨询顾问,计算机硕士。

Neo4j图数据库目前在工业界和学术界应用广泛。掌握Neo4j数据库的基本使用操作对于知识图谱,推荐系统等方面工程师或研究者来说,十分重要。在实际使用中,我们常常用CSV文件格式存储三元组数据,然后再通过Cypher查询语言将CSV文件中的三元组数据导入到Neo4j数据库中。

本次分享通过将教育领域开源知识图谱数据集Mooper导入Neo4j数据库中的案例,帮助读者掌握Neo4j数据库的基本使用。

01

Neo4j图数据库简介

Neo4j 是一种流行的图数据库管理系统,主要用于存储和查询与图结构相关的数据。在图数据库中,数据以图的形式表示,其中节点(node)代表实体,边(edge)代表实体间的关系。这种结构特别适合处理复杂的网络和关系数据,如社交网络、推荐系统、供应链管理等。

知识图谱相关研究者,常常选用Neo4j图数据库作为三元组存储的介质。

Neo4j 主要特点

节点和关系:在Neo4j 中,数据存储为节点(Node)和边(Edge)。节点通常代表实体,如人、地点或事物,而边代表实体间的关系。灵活的查询语言:Neo4j 使用 Cypher 查询语言,它是一种声明式、SQL风格的语言,专门为图形数据查询和操作设计。高性能:Neo4j 在处理大量复杂关系时能提供高效的性能。事务支持:支持ACID事务,确保数据完整性。多种语言支持:提供了多种编程语言的API和驱动程序,如Java、Python、JavaScript等。社区版和企业版:Neo4j 提供社区版和企业版,后者包括额外的高级功能,如集群支持、高可用性和性能优化。

官网地址:

02

Neo4j常用操作

Neo4j 使用 Cypher 查询语言进行操作,这是一种专为图数据库设计的声明式语言。下面是一些常用的 Neo4j 操作命令:1. 创建节点

CREATE (n:Label {property1: 'value1', property2: 'value2'})

这个命令创建了一个带有指定标签和属性的节点。

2. 创建关系

MATCH (a:Label1), (b:Label2)WHERE a.property = 'value1' AND b.property = 'value2'CREATE (a)-[r:RELATIONSHIP_TYPE]->(b)

这个命令在两个特定节点之间创建一个关系。

3. 查询节点

MATCH (n:Label)WHERE n.property = 'value'RETURN n

这个命令查找并返回具有特定标签和属性的所有节点。

4. 更新节点

MATCH (n:Label)WHERE n.property = 'value'SET n.property = 'new value'

这个命令更新符合特定条件的节点的属性。

5. 删除节点

MATCH (n:Label)WHERE n.property = 'value'DELETE n

删除具有特定属性的节点。请注意,如果该节点有任何关系,您需要先删除这些关系。

6. 查询关系

MATCH (a:Label1)-[r:RELATIONSHIP_TYPE]->(b:Label2)RETURN r

这个命令查找并返回特定类型的关系及其关联的节点。

7. 删除关系

MATCH (a:Label1)-[r:RELATIONSHIP_TYPE]->(b:Label2)DELETE r

删除两个特定节点之间的特定类型的关系。

8. 复杂查询

MATCH (a:Label1)-[r:RELATIONSHIP_TYPE]->(b:Label2)WHERE a.property = 'value1' AND b.property = 'value2'RETURN a, b

这个命令用于执行涉及多个节点和关系的更复杂的查询。

这些只是一些基本的操作示例。Cypher 查询语言功能强大而灵活,能够处理各种复杂的图形数据查询和操作。

03

CSV文件导入Neo4j数据库一般操作步骤

将 CSV 文件导入 Neo4j 的常见方法是使用 Cypher 语言中的 LOAD CSV命令。这个命令允许你从 CSV 文件中读取数据,并将其作为节点和关系加载到图形数据库中。

以下是进行此操作的一般步骤:

1. 准备 CSV 文件

确保 CSV 文件格式正确,csv列标题清晰定义。文件应存放在 Neo4j 的导入目录中。对于 Neo4j Desktop,这通常是你的数据库的 import文件夹。

2. 打开 Neo4j 浏览器或客户端

使用 Neo4j 浏览器或任何其他支持 Cypher 的客户端。

3. 使用 LOAD CSV 命令

使用以下基本语法来导入数据:

LOAD CSV WITH HEADERS FROM '; AS rowCREATE (n:Label {property1: row.column1, property2: row.column2, ...})

这里 是你的 CSV 文件路径,row是每一行的引用,Label 是你想要创建的节点的类型,property1, property2, ... 是节点的属性,它们对应于 CSV 文件中的列。

4. 创建关系

如果你需要在导入数据时创建节点间的关系,可以使用 MATCH 语句来查找已存在的节点,并创建关系。

LOAD CSV WITH HEADERS FROM '; AS rowMATCH (a:Label1 {property: row.column1}), (b:Label2 {property: row.column2})CREATE (a)-[:RELATIONSHIP_TYPE]->(b)

这里 RELATIONSHIP_TYPE是你要创建的关系的类型。

5. 处理大型文件

对于大型 CSV 文件,可能需要使用更高级的技术,比如使用 USING PERIODIC COMMIT 语句来批量提交事务,或优化 Cypher 查询以提高性能。

6. 检查和验证

导入完成后,使用 Cypher 查询来验证数据是否已正确导入到数据库中。请注意,具体的命令可能需要根据你的 CSV 文件的结构和内容进行调整。确保在执行导入之前备份现有的数据库数据,以防万一。

04

案例:Mooper数据集导入Neo4j数据库

Mooper简介

随着在线教育迅速发展,大规模在线开放课程(MOOC)兴起,为教学创新探索了前进方向。然而,目前的在线教育缺乏实践练习机制,导致“学”与“练”产生脱节,因此大规模在线开放实践(Massive Open Online Practice,MOOP)应运而生。

当前越来越多在线学习平台提供实践环境,EduCoder是其中的典型代表。EduCoder是信息技术类专业大规模在线实践教学平台,支持信息技术类专业一站式全栈化教学、实验、实战和科研活动。

通过抽取EduCoder平台2018-2019年间用户参与实践的交互数据,并将课程、实践、关卡、知识点的属性信息及其之间的相互关系建模为知识图谱,头歌平台的运营者构建了大规模实践导向型的在线学习数据集MOOPer。

MOOPer数据组织如图所示。

Mooper数据集下载

MOOPer数据集主要分为两个部分:交互数据与知识图谱。

交互数据(MOOPer/interaction/)包含2,532,524条练习数据 (challenge_interaction.csv), 21,606,390条系统反馈数据(outputs.csv),15,054条用户论坛讨论数据(discussions.csv)。

知识图谱 (MOOPer/knowledgeGraph/) 包含 11类实体(entity),10类关系(relation)。

MOOPer数据集由CCKS2021“MOOPer:A Large-scale Dataset of Practice-oriented Online Learning”论文发布。

下载地址:公众号“方华Elton”后台回复“mooper”。

创建MooperKG项目

在neo4j desktop中创建项目MooperKG,并创建同名的数据库。

导入challenge.csv文件

对于 Neo4j Desktop,首先将csv文件复制到数据库的 import 文件夹。

查找数据库import文件夹的方法:

在 Neo4j Desktop 中定位到 import 文件夹通常很直接。这个文件夹是 Neo4j 实例的一部分,用于存储和管理将要导入到 Neo4j 数据库的文件。以下是找到 import 文件夹的步骤:

1. 打开 Neo4j Desktop:

启动你的 Neo4j Desktop 应用程序。

2. 选择你的数据库项目:

在 Neo4j Desktop 中,选择你正在工作的数据库项目。

3. 找到数据库详情:

在所选项目中,点击你想要导入数据的数据库。通常,每个数据库在 Neo4j Desktop 的界面上都会有一个单独的面板或列表项。

4. 查看数据库详情:

在数据库的详细信息中,通常会显示数据库的版本、状态(是否运行中)以及一些配置选项。

5. 打开终端或命令提示符(如果 Neo4j Desktop 没有直接显示路径):

如果 Neo4j Desktop 没有直接显示 import 文件夹的路径,你可以打开终端(MacOS 或 Linux)或命令提示符(Windows),然后使用 Neo4j 的命令行工具来找到路径。

6. 使用 Neo4j 命令行工具:

在终端或命令提示符中,输入以下命令来查找 Neo4j 数据库的根目录:

```bash

neo4j-admin report

```

这个命令会生成一个报告,其中包括数据库的路径信息。

7. 在文件浏览器中导航:

找到数据库的根目录后,在你的文件浏览器中导航到这个位置。通常,`import` 文件夹就位于这个目录下。

使用 Neo4j LOAD CSV 命令。例如,如果你要为每条记录创建一个名为 Challenge的节点,你可以使用以下 Cypher 语句:

LOAD CSV WITH HEADERS FROM '; AS rowCREATE (:Challenge {challengeId: toInteger(row.challenge_id),name: row.name,taskPass: row.task_pass,answer: row.answer,score: toInteger(row.score),difficulty: toInteger(row.difficulty),praisesCount: toInteger(row.praises_count)})

这里 是你的 CSV 文件路径,row 代表 CSV 文件的每一行。

验证导入:使用 Cypher 查询来验证数据是否已正确导入到数据库中。

05

遇到的问题问题1:challenge的csv文件无法导入neo4j数据库问题描述

现在有节点5万7,关系1万1,遇到的问题就是涉及challenge的csv文件导入时出现不能导入的问题,错误见截图

报错原因

这个错误指出在处理您的 CSV 文件时,Neo4j 遇到了格式问题。特别是,在文件的某个地方,Neo4j 读取到一个以引号开始的字段,但在该引号结束之后该字段中还有更多字符。这在 CSV 格式中是不支持的。

要解决这个问题,请按照以下步骤操作:

检查 CSV 文件格式:打开您的 challenge.csv 文件并导航到报告的问题位置(大约在文件的 830744 字节处)。检查该位置是否有不正确的引号使用。比如,一个字段可能以引号开始,但在引号内包含了额外的引号或其他字符,这可能导致解析错误。正确处理引号:确保字段内的引号被正确处理。在 CSV 中,如果字段内有引号,通常需要对其进行转义。例如,如果您的字段包含引号(比如 "This "quoted" text"),它应该写成 "This ""quoted"" text" 或使用其他转义机制,具体取决于您的 CSV 生成工具。检查特殊字符:检查该位置是否包含换行符、额外的逗号或其他特殊字符,这些都可能干扰 CSV 的解析。使用文本编辑器或 CSV 编辑工具:使用文本编辑器(如 Notepad++、Sublime Text 等)或专门的 CSV 编辑工具检查和修改您的 CSV 文件。这些工具可以帮助您更容易地识别格式问题。重新导入数据:在修正 CSV 文件后,重新尝试导入数据到 Neo4j。结果及解决方案删除其中存在字符串转义问题的行或者,对其中存在字符串解析问题的行,进行对应修改,例如\",而不是”“内部嵌套双引号

05

结语

当前分享的Neo4j数据库使用文档比较基础,欢迎留言分享你在使用Neo4j数据库中存在的问题或想了解的功能使用。

点击阅读原文可以跳转至更加详细的Mooper数据集介绍。

标签: #java读取csv文件并存储