写入节点属性和标签
可以将计算出的节点属性持久化到 Neo4j 数据库中。我们将此操作称为写入。这类似于算法的 write
执行模式所做的,但允许对操作进行更精细的控制。
语法
CALL gds.graph.nodeProperties.write(
graphName: String,
nodeProperties: String or Map of Strings or List of Strings and/or Maps of Strings,
nodeLabels: String or List of Strings,
configuration: Map
)
YIELD
writeMillis: Integer,
propertiesWritten: Integer,
graphName: String,
nodeProperties: String or List of String,
configuration: Map
名称 | 类型 | 可选 | 描述 |
---|---|---|---|
graphName |
字符串 |
否 |
图在目录中存储的名称。 |
nodeProperties |
字符串、字符串映射,或字符串和/或字符串映射的列表 |
否 |
要回写到图中的节点属性。要回写具有新自定义名称的属性,请将其存储为映射中的条目,形式为: |
nodeLabels |
字符串或字符串列表 |
是 |
要回写其节点属性的节点标签。 |
configuration |
映射 |
是 |
配置 writeNodeProperties 的附加参数。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
整数 |
4 [1] |
是 |
用于运行算法的并发线程数。 |
|
writeConcurrency |
整数 |
'concurrency' |
是 |
用于写入节点属性的并发线程数。 |
GDS 会话 中的默认值为可用处理器数量 |
名称 | 类型 | 描述 |
---|---|---|
writeMillis |
整数 |
将结果数据回写到 Neo4j 所需的毫秒数。 |
propertiesWritten |
整数 |
写入的属性数量。 |
graphName |
字符串 |
目录中存储的图名称。 |
nodeProperties |
字符串或字符串列表 |
写入的节点属性。 |
configuration |
映射 |
用于运行该过程的配置。 |
CALL gds.graph.nodeLabel.write(
graphName: String,
nodeLabel: String,
configuration: Map
)
YIELD
writeMillis: Integer,
nodeLabelsWritten: Integer,
nodeLabel: String,
graphName: String,
nodeCount: Integer,
configuration: Map
名称 | 类型 | 可选 | 描述 |
---|---|---|---|
graphName |
字符串 |
否 |
图在目录中存储的名称。 |
nodeLabel |
字符串 |
否 |
要回写的节点标签。 |
configuration |
映射 |
是 |
配置 writeNodeProperties 的附加参数。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
nodeFilter |
字符串 |
不适用 |
否 |
用于过滤输入图中节点的 Cypher 谓词。请参见投影子图。 |
整数 |
4 [2] |
是 |
用于运行算法的并发线程数。 |
|
GDS 会话 中的默认值为可用处理器数量 |
名称 | 类型 | 描述 |
---|---|---|
writeMillis |
整数 |
将结果数据回写到 Neo4j 所需的毫秒数。 |
nodeLabelsWritten |
整数 |
写入的节点标签数量。 |
graphName |
字符串 |
目录中存储的图名称。 |
nodeLabel |
字符串 |
写入的节点标签。 |
nodeCount |
整数 |
图中节点的总数。 |
configuration |
映射 |
用于运行该过程的配置。 |
示例
以下所有示例都应在空数据库中运行。 示例通常使用Cypher 投影。原生投影将在未来的版本中弃用。 |
为了演示 GDS 在节点属性方面的功能,我们将在 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'})
写入节点属性
要将社交图中的所有节点标签的 'score' 属性回写,我们使用以下查询
score
属性回写到 Neo4jCALL gds.graph.nodeProperties.write('socialGraph', ['score'])
YIELD propertiesWritten
propertiesWritten |
---|
4 |
上述示例要求 score
属性存在于至少一个投影节点标签上,并且属性将为所有此类标签写入。
回写时重命名属性
可以重命名节点属性并将其以自定义名称回写到数据库。为此,您可以使用一个映射,其中每个条目都是一个元组 {nodeProperty: 'renamedProperty'}
,即键对应于内存图中现有的节点属性,值对应于要回写到数据库的名称。
为方便起见,一个映射可以包含多个条目。nodeProperties
配置参数接受字符串和映射,以及列表中的两者任意组合。当我们只想重命名少量属性时,这会很有帮助。
age
和 score
属性回写到 Neo4j,其中 score
使用新名称CALL gds.graph.nodeProperties.write('socialGraph', ['age', {score: 'writtenScore'}])
YIELD nodeProperties
nodeProperties |
---|
["age", "writtenScore"] |
在上述示例中,我们将 age
以其默认名称回写到数据库,而使用映射将 score
重命名为 writtenScore
。
写入节点标签
要为得分高于 0
的节点将新的节点标签回写到数据库,我们使用以下查询
Reader
节点标签回写到 Neo4jCALL gds.graph.nodeLabel.write('socialGraph', 'Reader', { nodeFilter: 'n.score > 0.0' })
YIELD graphName, nodeCount, nodeLabel, nodeLabelsWritten
graphName | nodeCount | nodeLabel | nodeLabelsWritten |
---|---|---|---|
"socialGraph" |
4 |
"Reader" |
2 |
Reader
节点标签MATCH (n:Reader) RETURN n.name AS name, labels(n) AS labels
ORDER BY name ASC
名称 | 标签 |
---|---|
"Adam" |
["Person", "Reader"] |
"Florentin" |
["Person", "Reader"] |
正如我们从数据库中看到的,Veselin
的 score: 0.0
,因此他不是一个 Reader
。