Releases: neo4j/graph-data-science
1.1.3
Release date: 9 July, 2020
GDS 1.1.3 is compatible with Neo4j 3.5.9 and above, but not Neo4j 4.x. For a 4.0 compatible release, please see GDS 1.2.2.
Breaking changes:
- Alpha similarity algorithms no longer accept graph names as a parameter. The algorithms never used the named graph, and now the possibility to specify one is removed - this provides significant performance improvements.
Bug fixes:
- Fixed a bug where the Jaccard Similarity function would compute incorrectly when inputs contained duplicates.
- Fixed a bug where Alpha Similarity algorithms would load a graph even though they operate on separate inputs.
See also:
GDS 1.3 Preview
Release date: 3 July, 2020
Warning: This is a preview release and not intended for production use. If you have any feedback, please let us know: https://github.com/neo4j/graph-data-science/issues
GDS 1.3.0 is compatible with Neo4j 4.0 and 4.1, but not Neo4j 3.5.x. For a 3.5 compatible release, please see GDS 1.1.2.
New Features
- Node Embeddings: We have added three proof of concept implementations of node embeddings to our alpha tier - Node2Vec, Random Projections, and GraphSage.
- Node2Vec supports:
gds.alpha.node2vec.stream
gds.alpha.node2vec.write
- Random Projections supports:
gds.alpha.randomProjection.stream
gds.alpha.randomProjection.write
- GraphSAGE supports:
gds.alpha.graphSage.stream
gds.alpha.graphSage.write
- Betweenness Centrality is now fully supported. We have added the following procedures to the production tier:
gds.betweenness.stream
gds.betweenness.stats
gds.betweenness.mutate
gds.betweenness.write
gds.betweenness.stream.estimate
gds.betweenness.stats.estimate
gds.betweenness.mutate.estimate
gds.betweenness.write.estimate
- RBAC integration: GDS Enterprise Edition now respects role based access control definitions
- Pregel API improvements: we now support relationship weights in our Pregel API
- Streaming from the in memory graph: We now support
gds.graph.streamNodeProperty
,gds.graph.streamNodeProperties
,gds.graph.streamRelationshipProperty
andgds.graph.streamRelationshipProperties
, which allow users to stream data from an in memory graph. - nodeSimilarity now supports relationship weights.
- Graph export (
gds.graph.export
) has graduated to the product supported tier, and now includes the option to specify a default relationship type. - Harmonic centrality has been added, and we now support
gds.alpha.closeness.harmonic.stream
andgds.alpha.closeness.harmonic.stream
- Stats mode: we’ve added support for the statistics mode (returning percentiles and distribution metrics) for the following procedures
- Cosine Similarity
- Euclidean Distance
- Overlap Similarity
- Pearson Similarity
Breaking Changes:
- The alpha procedures for betweenness centrality have been removed (
gds.alpha.betweenness.stream
,gds.alpha.betweenness.write
,gds.alpha.betweenness.sampled.stream
,gds.alpha.betweenness.sampled.write
). gds.beta.graph.export
was removed and replaced with the product ready tier (gds.graph.export
).- Alpha similarity algorithms no longer accept graph names as parameters; they do not use the named graph, so the requirement to specify one has been removed.
Improvements:
- Previously, users could export an in-memory graph to an existing (but empty) database, which would produce an inconsistent database -- this operation is no longer allowed.
gds.alpha.randomWalk
will return partial walks when the configured steps cannot be exhaustedgds.alpha.shortestPath.astar
now reads lat/lon properties from the in memory graph during algorithm execution- Alpha similarity algorithms no longer require graph projections to be specified (this speeds up run time significantly)
gds.nodeSimilarity.stats
now returnssimilarityPairs
to track the number of comparisons- Improved memory estimation for Cypher projections
- Inner element projection fields are now included as part of syntax checking, as well as typo correction
- Most
IllegalArgumentExceptions
are now collected and returned in a single exception
Bug Fixes:
- Fixed a bug where Node2Vec returned an ArrayIndexOutOfBounds Exception
- Fixed a bug where Jaccard Similarity would compute incorrectly when inputs contained duplicated
- Fixed a bug where alpha similarity algorithms loaded a graph even though they operated on separate inputs
- Fixed a bug where implicit graph loading ignored the concurrency setting in the algorithm configuration
- Fixed a bug where generated graphs (from gds.beta.graph.generate) were not listed by graph.list
- Fixed a bug in
gds.alpha.ml.ann
where the computation could fail with an IndexOutOfBoundsException - Path finding algorithms:
- Fixed a bug affecting
gds.alpha.dfs.stream
andgds.alpha.bfs.stream
where the result-path was in the wrong order. - Fixed a bug affection
gds.alpha.kshortestPath
,gds.alpha.shortestPaths.stream
andgds.alpha.shortestPath.astar
where a wrong default relationship weight lead to incorrect path calculations - Fixed a bug affecting path-finding algorithms, where the
startNode
orendNode
was not loaded - Fixed a bug affecting
gds.alpha.spanningTree.kmin
andgds.alpha.spanningTree.kmax
where an incorrectstartNodeId
was used to create the spanning tree
- Fixed a bug affecting
- Updated function descriptions to start with “RETURN” instead of “CALL”
- Added missing fields to the following:
nodePropertiesWritten,
to the Louvain mutate procedurenodePropertiesWritten
to the label propagation algorithmpostProcessingMillis
to the pageRank stats, write, and mutate procedures
1.3.0-alpha02
Tagging for 1.3.0-alpha02
1.2.2
Release date: 16 June, 2020
GDS 1.2.2 is compatible with Neo4j 4.0 and above, but not Neo4j 3.5.x. For a 3.5 compatible release, please see GDS 1.1.2.
Bug fixes:
- Added missing field
nodePropertiesWritten
to Louvain mutate procedure - Fixed a bug in
gds.alpha.ml.ann
where the computation sometimes failed with an IndexOutOfBoundsException. - Fixed a case in graph creation where a named all-relationships projection would be loaded but the name discarded, and could then not be used for filtering.
gds.alpha.randomWalk
now returns partial walks when the configured steps cannot be exhausted.- Fixed a bug affecting
gds.alpha.dfs.stream
andgds.alpha.bfs.stream
where the result-path was in the wrong order.
See also:
1.1.2
Release date: 15 June, 2020
GDS 1.1.2 is compatible with Neo4j 3.5.9 and above, but not Neo4j 4.x. For a 4.0 compatible release, please see GDS 1.2.1.
Bug fixes:
- Added missing field
nodePropertiesWritten
to Louvain mutate procedure - Fixed a bug in
gds.alpha.ml.ann
where the computation sometimes failed with an IndexOutOfBoundsException. - Fixed a case in graph creation where a named all-relationships projection would be loaded but the name discarded, and could then not be used for filtering.
gds.alpha.randomWalk
now returns partial walks when the configured steps cannot be exhausted.- Fixed a bug affecting
gds.alpha.dfs.stream
andgds.alpha.bfs.stream
where the result-path was in the wrong order.
See also:
1.2.1
Release date: May 7, 2020
Bug Fixes:
- A bug in the
maxDegree
parameter was fixed, which previously would preventtriangleCount
from running when it was used.
1.2.0
Release date: May 7, 2020
Compatibility: GDS 1.2 is compatible with Neo4j 4.0.0 and above. GDS 1.2 is not compatible with Neo4j 3.5.x.
New Features:
- Triangle Count has moved into the product tier. This means it is now called via
gds.triangleCount
, and all associated bugs have been fixed. We have also added an optionalmaxDegree
parameter that users can specify to eliminate dense nodes and speed up calculations.- This adds the following new procedures:
gds.triangleCount.stream
,gds.triangleCount.write
,gds.triangleCount.mutate
,gds.triangleCount.stats
- This removes the alpha procedures
gds.alpha.triangleCount.stream
,gds.alpha.triangleCount.write
, andgds.alpha.triangleCount.stats
- The global triangle count is available as an output of the
.stats
or.write
mode
- This adds the following new procedures:
- Clustering Coefficient . has moved into the product tier (and is now separate from triangleCount). It can now be called via
gds.localClusteringCoefficient
, and all bugs have been fixed.- This adds the following new procedures:
gds.localClusteringCoefficient.stream
,gds.localClusteringCoefficient.write
,gds.localClusteringCoefficient.mutate
,gds.localClusteringCoefficient.stats
- The global clustering coefficient is available as an output of the
.stats
or.write
mode
- This adds the following new procedures:
- Graph export has moved to the
beta
tier, and can now export a new graph as a new database in Neo4j 4.0’s multidatabase environment. - All of our product tier community detection algorithms now support assigning consecutive integers for community IDs by using the optional
consecutiveID
parameter. gds.graph.list
now outputssizeInBytes
andmemoryUsage
to enable users to see the memory footprint of loaded graphs.- We have added node label filters to
gds.graph.writeNodeProperties
,gds.graph.removeNodeProperties
, andgds.util.nodeProperty
- We have added a centralityDistribution result field for page pank’s write, stats, and mutate procedures
Breaking changes:
- GDS 1.2 has dropped support for Neo4j 3.5, and now only works in 4.0
- g
ds.alpha.triangle.stream
has been renamedgds.alpha.triangle
s storeDir
has been removed fromgds.graph.export
, instead it will create a new database in thedatabases
directory of your current installation.creationTime
andmodificationTime
have been updated to used ZonedDateTime- We have removed explicit definition of property mappings and aggregations from cypher projections
Bug fixes:
- Fixed
gds.graph.writeNodeProperties
where it did not return the count of mutated properties, and incorrectly wrote 0 for nodes which were missing properties. - Graphs created via Cypher projections no longer return inferred projections (they just return the query)
- Corrected a bug where mutated node properties had size 0
- Fixed a bug where community detection using a seed property from an in-memory node property failed to write results.
- Fixed a bug where similarity algorithms would throw on weight vectors containing null
GDS 1.1.1 Release (compatible with Neo4j 3.5)
Release date: 4 May, 2020
GDS 1.1.1 is compatible with Neo4j 3.5.9 and above, but not Neo4j 4.x. For a 4.0 compatible release, please see GDS 1.2.0.
Bug fixes:
- Fixed several bugs with mutated node properties:
- Mutated node properties no longer have size 0
- gds.graph.writeNodeProperties previously did not return counts for node properties; this has been fixed
- Fixed a bug where progress logging could slow down algorithm performance
- gds.graph.writeNodeProperties no longer writes 0 to nodes missing the specified property
- Fixed a bug where seeding from an in-memory node property caused no results to be written back.
1.2.0-alpha01
Release date: April 24, 2020
Important information: This is a preview release and not recommended for production. We plan on offering a GA version of our 1.2 library on May 7. If you have feedback on the preview, please open an issue on our github repo!
Compatibility: GDS 1.2 is compatible with Neo4j 4.0.0 and above.
New Features:
- Triangle Count has moved into the product tier. This means it is now called via
gds.triangleCount
, and all associated bugs have been fixed.- This adds the following new procedures:
gds.triangleCount.stream
,gds.triangleCount.stream.estimate
,gds.triangleCount.write
,gds.triangleCount.write.estimate
,gds.triangleCount.stats
,gds.triangleCount.stats.estimate
,gds.triangleCount.mutate
, andgds.triangleCount.mutate.estimate
- This removes the alpha procedures gds.alpha.triangleCount.stream, gds.alpha.triangleCount.write, gds.alpha.triangleCount.stats
- This adds the following new procedures:
- Graph export has moved to the
beta
tier, and can now export a new graph as a new database in Neo4j 4.0’s multidatabase environment. - All of our product tier community detection algorithms now support assigning consecutive integers for community IDs by using the optional
consecutiveID
parameter. - We have added a schema column to
graph.list()
display a unified view of the schema of the in memory graph (node labels, node properties, relationship types, relationship properties). This includes any new properties or relationships introduced by usingmutate
mode. - We have added node label filters to
gds.graph.writeNodeProperties
,gds.graph.removeNodeProperties
andgds.util.nodeProperty
gds.graph.list
now outputssizeInBytes
andmemoryUsage
to enable users to see the memory footprint of loaded graphs.
Breaking changes:
- We have dropped support for Neo4j 3.5
storeDir
has been removed fromgds.graph.export
, instead it will create a new database in thedatabases
directory of your current installation.creationTime
and modificationTime have been updated to used ZonedDateTime- We have removed the explicit definition of property mappings and aggregations in cypher projections.
Bug fixes:
- Fixed &
gds.graph.writeNodeProperties
where it did not return the count of mutated properties, and incorrectly wrote 0 for nodes which were missing properties. - Graphs created via Cypher projections no longer return inferred projections (they just return the query)
- Corrected a bug where mutated node properties had size 0
- Fixed a bug where community detection using a seed property from an in-memory node property failed to write results.
1.1.0
Release date: 9 April, 2020
New features:
- Multiple node label support: You can now load, and reference, multiple node labels in your in memory graph. This allows you to load all the data you need for multiple algorithms once and refer to specific node labels when you call each algorithm. This is specified by the new parameter
nodeLabels
. - Graph mutability: We’ve introduced the ability to update your in-memory analytics graph when you execute product supported and beta algorithms. This allows you to chain together multiple algorithms, and only write back your final results to your Neo4j database. To support this we’ve added procedures to:
- Update your in memory graph with the
.mutate
mode for product supported and beta procedures (not available for alpha) - Write mutated data back to your Neo4j database with
graph.writeNodeProperties
andgraph.writeRelationship
, - Remove data from your in memory graph with
gds.graph.removeNodeProperties
andgds.graph.deleteRelationships
- Inspect your in memory graph with
gds.util.nodeProperty
, which allows you to retrieve node properties from a named in memory graph.
- Update your in memory graph with the
- Heap control: All gds procedures execute on heap, and this may lead to OOMs, so we now block the execution of algorithms that will require more memory than currently available.
- Graph Export: We’ve added a catalog procedure to allow you to create new Neo4j databases from named in-memory graphs,
gds.alpha.graph.export
- Other features to improve user experience:
gds.graph.list
now returns a timestamp to indicate when a graph was created as well as a modificationDate to indicate if/when a graph was mutated.- Removed redundant
write
config parameter from several alpha procedures - Added
validateRelationships
parameter to Cypher projections, to control behaviour when a user accidentally specifies relationships between non-existent nodes (specify drop or fail) - New aggregation type,
COUNT
, to summarize parallel relationships based on their total count - When a user improperly misconfigures a procedure call, the error message now suggests the possible misspelled key
- Better error messaging when a user accidentally loads an empty graph
Bug fixes:
gds.alpha.spanningTree
has been fixed so it now creates relationship properties- Fixed
.estimate
function when run on an in memory graph created viagds.graph.generate
- Fixed out of order and incorrect progress logging for
gds.nodeSimilarity
- Removed default value of
null
for graph names ingds.graph.exists()
Breaking changes:
- Parallel cypher node loading (via use of
SKIP
andLIMIT
) has been disabled -- data are already loaded in parallel, and this method results in significantly worse performance than the default mode.
The GDS library is compatible with Neo4j 3.5 versions 3.5.9 and above.
The GDS library is not compatible with Neo4j 4.0. We plan on releasing a 4.0 compatible version in late April 2020.
Feedback? Please post feedback as issues on our github repo!