cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.

PageRank with Log Scaler: "Negative values cannot be recorded"

I want to calculate a page rank on my graph.

Call gds.pageRank.stream({
    nodeProjection: "Nutzer",
    relationshipProjection: "ANTWORTETE_AUF",
    writeProperty: "pageRank",
    scaler: "log"
    }
)

but I get the following error:

Failed to invoke procedure `gds.pageRank.write`: Caused by: java.lang.ArrayIndexOutOfBoundsException:
The value -1.5672566228294513 is out of bounds for histogram, current covered range
[6.668014432879854E240, 5.3344115463038834E241) cannot be extended any further.
Caused by: java.lang.ArrayIndexOutOfBoundsException: Negative values cannot be recorded

It seems like it's writing to an unsigned data type? Stream mode works perfectly fine.

Update: At least some values are written to the db.

I'm using Neo4j 4.3.3 and GDS 1.6.4

1 ACCEPTED SOLUTION

Hey Sandro,
the underlying issue is in the computation of the centralityDistribution when using the write or mutate mode.
We always assumed, that the pageRank scores are positive, but by using a log scaler, the scores can get negative.

We will look into fixing the bug, but in the meantime you can use Call gds.pageRank.write({ nodeProjection: "Nutzer", relationshipProjection: "ANTWORTETE_AUF", writeProperty: "pageRank", scaler: "log" } ) YIELD ranIterations, nodePropertiesWritten (Basically everything can be yielded except centralityDistribution)

View solution in original post

2 REPLIES 2

Hey Sandro,
the underlying issue is in the computation of the centralityDistribution when using the write or mutate mode.
We always assumed, that the pageRank scores are positive, but by using a log scaler, the scores can get negative.

We will look into fixing the bug, but in the meantime you can use Call gds.pageRank.write({ nodeProjection: "Nutzer", relationshipProjection: "ANTWORTETE_AUF", writeProperty: "pageRank", scaler: "log" } ) YIELD ranIterations, nodePropertiesWritten (Basically everything can be yielded except centralityDistribution)

Also you can use a different scaler. For the traditional PageRank scores, the L1Norm scaler should work.