将有向关系转换为无向关系

此功能处于 Beta 级别。有关功能级别的更多信息,请参阅 API 级别

简介

在 GDS 中,某些算法(如三角形计数和链接预测)需要无向关系。此过程将有向关系转换为无向关系,并将结果输出为一种新的关系类型。这对于转换由路径算法等算法产生的关系非常有用。

语法

CALL gds.graph.relationships.toUndirected(
    graphName: String,
    configuration: Map
)
YIELD
    inputRelationships: Integer,
    relationshipsWritten: Integer,
    mutateMillis: Integer,
    postProcessingMillis: Integer,
    preProcessingMillis: Integer,
    computeMillis: Integer,
    configuration: Map
表 1. 参数
名称 类型 可选 描述

graphName

字符串

图在目录中存储的名称。

configuration

映射

配置 streamNodeProperties 的附加参数。

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

relationshipType

字符串

不适用

要转换为无向关系的关系类型。

mutateRelationshipType

字符串

不适用

要添加到图中的关系类型。

aggregation

映射或字符串

并行关系的处理方式。允许的值包括 NONEMINMAXSUMSINGLECOUNT。使用映射可以为每个关系属性指定聚合。默认情况下,我们将使用初始投影期间使用的现有聚合。

concurrency

整数

4 [1]

运行算法所用的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID 以更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,则不会记录进度百分比。

1. 在 GDS 会话中,默认值为可用处理器数量。

表 3. 结果
名称 类型 描述

inputRelationships

整数

已处理的关系数量。

relationshipsWritten

整数

已添加的关系数量。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

postProcessingMillis

整数

未使用。

mutateMillis

整数

将关系添加到投影图的毫秒数。

configuration

映射

运行算法所用的配置。

示例

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

示例通常使用 Cypher 投影。原生投影将在未来的版本中弃用。

为了演示将有向关系转换为无向关系,我们将在 Neo4j 中创建一个小图并将其投影到我们的图目录中。

Visualization of the example graph
以下 Cypher 语句将在 Neo4j 数据库中创建示例图
CREATE
  (alice:Person {name: 'Alice'}),
  (bob:Person {name: 'Bob'}),
  (carol:Person {name: 'Carol'}),
  (dave:Person {name: 'Dave'}),
  (eve:Person {name: 'Eve'}),
  (guitar:Instrument {name: 'Guitar'}),
  (synth:Instrument {name: 'Synthesizer'}),
  (bongos:Instrument {name: 'Bongos'}),
  (trumpet:Instrument {name: 'Trumpet'}),

  (alice)-[:LIKES { score: 5 }]->(guitar),
  (alice)-[:LIKES { score: 4 }]->(synth),
  (alice)-[:LIKES { score: 3}]->(bongos),
  (bob)-[:LIKES { score: 4 }]->(guitar),
  (bob)-[:LIKES { score: 5 }]->(synth),
  (carol)-[:LIKES { score: 2 }]->(bongos),
  (dave)-[:LIKES { score: 3 }]->(guitar),
  (dave)-[:LIKES { score: 1 }]->(synth),
  (dave)-[:LIKES { score: 5 }]->(bongos)
投影图
MATCH (person:Person)-[r:LIKES]->(instr:Instrument)
RETURN gds.graph.project(
  'personsAndInstruments',
  person,
  instr,
  {
    sourceNodeLabels: labels(person),
    targetNodeLabels: labels(instr),
    relationshipType: type(r),
    relationshipProperties: r { .score }
  }
)

以下展示了如何将图中类型为 LIKES 的关系从有向转换为无向,方法是创建一种新类型 INTERACTS 的无向关系。

将关系从有向转换为无向
CALL gds.graph.relationships.toUndirected(
  'personsAndInstruments',                                          (1)
  {relationshipType: 'LIKES', mutateRelationshipType: 'INTERACTS'}  (2)
)
YIELD
  inputRelationships, relationshipsWritten
1 投影图的名称。
2 一个映射,包含要转换为无向关系的关系类型以及要添加到图中的关系类型。
表 4. 结果
inputRelationships relationshipsWritten

9

18

以下是执行上述示例后,Neo4j 中示例图的示意图。

Visualization of the example graph after converting the relationships to undirected
© . All rights reserved.