删除图的一部分

删除图的一部分对于释放内存或删除先前变异的算法结果很有用。

语法

图上不同删除操作的语法描述
  • Drop node property
  • Drop relationship type
CALL gds.graph.nodeProperties.drop(
    graphName: String,
    nodeProperties: String or List of Strings,
    configuration: Map
)
YIELD
    propertiesRemoved: Integer,
    graphName: String,
    nodeProperties: String or List of String
表 1. 参数
名称 类型 可选 描述

graphName

字符串

图在目录中存储的名称。

nodeProperties

字符串或字符串列表

要删除的图中的节点属性。

configuration

映射

其他配置参数。

表 2. 配置
名称 类型 默认值 描述

concurrency

整数

4

并发线程数。注意,此过程始终以单线程运行。

failIfMissing

布尔值

true

如果为 false,则该过程将忽略图中不存在的属性。

表 3. 结果
名称 类型 描述

propertiesRemoved

整数

已删除的属性数量。

graphName

字符串

存储在目录中的图的名称。

nodeProperties

字符串或字符串列表

已删除的节点属性。

CALL gds.graph.relationships.drop(
    graphName: String,
    relationshipType: String
)
YIELD
  graphName: String,
  relationshipType: String,
  deletedRelationships: Integer,
  deletedProperties: Map
表 4. 参数
名称 类型 可选 描述

graphName

字符串

图在目录中存储的名称。

relationshipType

字符串

要删除的图中的关系类型。

表 5. 结果
名称 类型 描述

graphName

字符串

存储在目录中的图的名称。

relationshipType

字符串

已删除关系的类型。

deletedRelationships

整数

从内存中图中删除的关系数。

deletedProperties

整数

映射,其中键是关系属性的名称,值是该名称下已删除的属性数。

示例

以下所有示例都应在空数据库中运行。

这些示例使用 Cypher 投影 作为规范。原生投影将在未来的版本中弃用。

为了演示 GDS 在节点属性上的功能,我们将创建一个小型社交网络图并在 Neo4j 中将其投影到我们的图目录中。

以下 Cypher 语句将在 Neo4j 数据库中创建示例图
CREATE
  (florentin:Person { name: 'Florentin', age: 16 }),
  (adam:Person { name: 'Adam', age: 18 }),
  (veselin:Person { name: 'Veselin', age: 20 }),
  (hobbit:Book { name: 'The Hobbit', numberOfPages: 310 }),
  (florentin)-[:KNOWS { since: 2010 }]->(adam),
  (florentin)-[:KNOWS { since: 2018 }]->(veselin),
  (adam)-[:READ]->(hobbit)
投影小型社交网络图
MATCH (n:Person)-[r:KNOWS|READ]->(m:Person|Book)
RETURN gds.graph.project('socialGraph', n, m,
  {
    sourceNodeLabels: labels(n),
    targetNodeLabels: labels(m),
    sourceNodeProperties: n { .age },
    targetNodeProperties: CASE WHEN m:Person THEN m { .age } ELSE {} END,
    relationshipType: type(r)
  }
)
计算社交图中的度中心性
CALL gds.degree.mutate('socialGraph', {mutateProperty: 'score'})

删除节点属性

socialGraph 中所有投影节点中删除 score 属性
CALL gds.graph.nodeProperties.drop('socialGraph', ['score'])
YIELD propertiesRemoved
表 6. 结果
propertiesRemoved

4

上述示例要求所有给定的属性都存在于至少一个投影节点标签上。

忽略缺失属性

默认情况下,如果任何给定的属性不存在于图中,则该过程将失败。如果要忽略缺失属性,可以将 failIfMissing 配置选项设置为 false

尝试从 socialGraph 中所有投影节点中删除 missing_score 属性
CALL gds.graph.nodeProperties.drop('socialGraph', ['missing_score'], {failIfMissing: false})
YIELD propertiesRemoved, nodeProperties
表 7. 结果
propertiesRemoved nodeProperties

0

[]

删除指定类型的关系

我们可以从目录中的命名图中删除给定类型的所有关系。这对于释放主内存或删除意外添加的关系类型很有用。

仅当给定类型的关系不是图中存在的最后一种关系类型时,才能删除该类型的关系。如果我们仍然想要删除这些关系,则需要删除图

从命名图中删除所有类型为SIMILAR的关系
CALL gds.graph.relationships.drop(
  'socialGraph',                    (1)
  'READ'                            (2)
)
YIELD
  graphName, relationshipType, deletedRelationships, deletedProperties
1 投影图的名称。
2 我们要从投影图中删除的关系类型。
表 8. 结果
graphName relationshipType deletedRelationships deletedProperties

"socialGraph"

"READ"

1

{}