【问题标题】:Creating Relationships over already existing Huge Dataset在现有的巨大数据集上创建关系
【发布时间】:2016-08-26 16:40:27
【问题描述】:

我有一个表 - Entity(Entities.txt),我已经使用“LOAD CSV”命令将其加载到 Neo4j 中。 Entity 表的结构如下:

**Entity Table**
ENT_ID  Name  PARENTID
1      ABC     0     
2      DEF     1
3      GHI     0
4      JKG     3

我有另一个表格,格式如下:

**Relationship Table**
RelationID ENT_IDPARENT ENT_IDCHILD 
 1     1        2
 2     3        5
 3     4        6

我需要在现有节点上创建关系。每个 RelationID 代表一种特定类型的关系。例如:RelationID = 1 表示 ENT_IDPARENT = 1 是 FATHER_OF ENT_IDCHILD = 2。类似地,每个其他 RID 都代表一些其他关系。该表有 40 个 RID。

根据链接: How to create unique nodes and relationships by csv file imported in neo4j?

我尝试编写以下语法来创建关系。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///C:/Users/ssubramana001/Desktop/EntitiesRelationships_Updated.txt" AS Entity FIELDTERMINATOR '|' 
MATCH (n:Entity {ENT_ID: Entity.ENT_IDPARENT})
WITH Entity, n
MATCH (m:Entity {ENT_ID: Entity.ENT_IDCHILD})
WITH m,n
MERGE (n)-[r:SON_OF]->(m)

此查询无效。

【问题讨论】:

  • 什么不起作用?您是否尝试过使用RETURN Entity LIMIT 10 切割部分,例如删除匹配项并返回第一行以确保其读取正常?然后匹配第一个节点并返回它?等等。顺便说一句,如果你使用与节点标签不同的行的变量名(Entity),它会更具可读性。
  • Java Heap Space 在运行大约一个小时左右后出现错误。当我确实使用了不同的变量名称和标签时,它最终创建了一个关系,即使它出错了,但是该关系是在标签名称下而不是在实体下创建的
  • 您可能还想使用更具描述性的变量名称,例如“父”和“子”,因为这样更容易避免创建错误的关系。在您的描述中,您说节点 n 是节点 m 的儿子,但是您将父 id 与节点 n 匹配,因此您的关系是倒退的。此外,除非您 CSV 中的所有孩子都是男性,否则我不确定您的 SON_OF 关系是否是最好的选择。

标签: neo4j cypher


【解决方案1】:

显然,我没有包含数百万行的实际文件,但这绝对适用于您的示例:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///relationships.csv" AS line
WITH toInt(line.ENT_IDPARENT) AS parentId, toInt(line.ENT_IDCHILD) AS childId
WHERE line.RelationID = '1'
MATCH (p:Entity {ENT_ID: parentId}), (c:Entity {ENT_ID: childId})
MERGE (p)-[:FATHER_OF]->(c);

请注意,它会像创建节点 in your previous question 一样转换数值。

USING PERIODIC COMMIT 出现 OutOfMemory 错误真的感觉很奇怪,但您可以尝试将 CSV 文件拆分为较小的文件,看看在全部导入后是否也会发生这种情况。也许您的 Neo4j 实例根本没有足够的内存来管理所有这些节点(我猜它必须非常有限)?您能否用确切的 OutOfMemory 错误更新问题,包括消息?你可能会用完 PermGen 或 MetaSpace(取决于你的 Java 版本),或者因为这个原因导致交换和 GC 花费了太多时间。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2019-04-15
    • 2017-07-08
    • 2012-02-23
    相关资源
    最近更新 更多