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 and gds.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 and gds.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 exhausted
  • gds.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 returns similarityPairs 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 and gds.alpha.bfs.stream where the result-path was in the wrong order.
    • Fixed a bug affection gds.alpha.kshortestPath, gds.alpha.shortestPaths.stream and gds.alpha.shortestPath.astar where a wrong default relationship weight lead to incorrect path calculations
    • Fixed a bug affecting path-finding algorithms, where the startNode or endNode was not loaded
    • Fixed a bug affecting gds.alpha.spanningTree.kmin and gds.alpha.spanningTree.kmax where an incorrect startNodeId was used to create the spanning tree
  • Updated function descriptions to start with “RETURN” instead of “CALL”
  • Added missing fields to the following:
    • nodePropertiesWritten, to the Louvain mutate procedure
    • nodePropertiesWritten to the label propagation algorithm
    • postProcessingMillis to the pageRank stats, write, and mutate procedures