Class UnionGraph
- java.lang.Object
-
- org.neo4j.gds.core.huge.UnionGraph
-
- All Implemented Interfaces:
BatchNodeIterable
,CSRGraph
,Degrees
,Graph
,IdMap
,NodeIterator
,PartialIdMap
,NodePropertyContainer
,RelationshipIterator
,RelationshipPredicate
,RelationshipProperties
public final class UnionGraph extends java.lang.Object implements CSRGraph
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.neo4j.gds.api.BatchNodeIterable
BatchNodeIterable.BitSetIdIterator, BatchNodeIterable.IdIterable, BatchNodeIterable.IdIterator
-
Nested classes/interfaces inherited from interface org.neo4j.gds.api.IdMap
IdMap.NodeLabelConsumer
-
-
Field Summary
-
Fields inherited from interface org.neo4j.gds.api.IdMap
NOT_FOUND, START_NODE_ID
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addNodeIdToLabel(long mappedNodeId, org.neo4j.gds.NodeLabel nodeLabel)
Assigns a node to the given node label.void
addNodeLabel(org.neo4j.gds.NodeLabel nodeLabel)
Adds new node label to the available node labels.java.util.Optional<NodeFilteredGraph>
asNodeFilteredGraph()
If this graph is created using a node label filter, this will return a NodeFilteredGraph that represents the node set used in this graph.java.util.Set<org.neo4j.gds.NodeLabel>
availableNodeLabels()
java.util.Set<java.lang.String>
availableNodeProperties()
java.util.Collection<org.neo4j.gds.collections.primitive.PrimitiveLongIterable>
batchIterables(long batchSize)
GraphCharacteristics
characteristics()
CSRGraph
concurrentCopy()
boolean
contains(long originalNodeId)
Returns true iff the Neo4j id is mapped, otherwise false.int
degree(long nodeId)
Returns the number of relationships connected to that node.int
degreeInverse(long nodeId)
Returns the number of relationships connected to that node.int
degreeWithoutParallelRelationships(long nodeId)
Much slower than just degree() because it may have to look up all relationships.boolean
exists(long sourceNodeId, long targetNodeId)
O(n) !void
forEachInverseRelationship(long nodeId, double fallbackValue, RelationshipWithPropertyConsumer consumer)
Calls the given consumer for every inverse relationship of a given node.void
forEachInverseRelationship(long nodeId, RelationshipConsumer consumer)
Calls the given consumer for every inverse relationship of a given node.void
forEachNode(java.util.function.LongPredicate consumer)
Iterate over each nodeIdvoid
forEachNodeLabel(long mappedNodeId, IdMap.NodeLabelConsumer consumer)
void
forEachRelationship(long nodeId, double fallbackValue, RelationshipWithPropertyConsumer consumer)
Calls the given consumer function for every relationship of a given node.void
forEachRelationship(long nodeId, RelationshipConsumer consumer)
Calls the given consumer function for every relationship of a given node.boolean
hasLabel(long mappedNodeId, org.neo4j.gds.NodeLabel label)
boolean
hasRelationshipProperty()
long
highestOriginalId()
The highest id that is mapped in this id mapping.boolean
isMultiGraph()
Whether the graph is guaranteed to have no parallel relationships.boolean
isNodeFilteredGraph()
long
nodeCount()
Number of mapped nodeIds.long
nodeCount(org.neo4j.gds.NodeLabel nodeLabel)
Number of mapped nodeIds for a specific node label.java.util.PrimitiveIterator.OfLong
nodeIterator()
java.util.PrimitiveIterator.OfLong
nodeIterator(java.util.Set<org.neo4j.gds.NodeLabel> labels)
java.util.List<org.neo4j.gds.NodeLabel>
nodeLabels(long mappedNodeId)
NodePropertyValues
nodeProperties(java.lang.String propertyKey)
Return the property values for a property key NOTE: Avoid using this on the hot path, favor caching the NodeProperties object when possiblelong
nthTarget(long nodeId, int offset)
Get the n-th target node id for a givensourceNodeId
.static CSRGraph
of(java.util.List<? extends CSRGraph> graphs)
long
relationshipCount()
double
relationshipProperty(long sourceNodeId, long targetNodeId)
Returns the property value for a relationship defined by its source and target nodes.double
relationshipProperty(long sourceNodeId, long targetNodeId, double fallbackValue)
get value of property on relationship between source and target node idjava.util.Map<org.neo4j.gds.RelationshipType,Topology>
relationshipTopologies()
CompositeAdjacencyList
relationshipTopology()
Graph
relationshipTypeFilteredGraph(java.util.Set<org.neo4j.gds.RelationshipType> relationshipTypes)
IdMap
rootIdMap()
Returns the original node mapping if the current node mapping is filtered, otherwise it returns itself.java.util.OptionalLong
rootNodeCount()
Number of mapped node ids in the root mapping.org.neo4j.gds.api.schema.GraphSchema
schema()
java.util.stream.Stream<RelationshipCursor>
streamRelationships(long nodeId, double fallbackValue)
Returns a stream which returns every relationship in the graph starting from the given node id.long
toMappedNodeId(long originalNodeId)
Maps an original node id to a mapped node id.long
toOriginalNodeId(long mappedNodeId)
Returns the original node id for the given mapped node id.long
toRootNodeId(long mappedNodeId)
Maps a filtered mapped node id to its root mapped node id.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.neo4j.gds.api.IdMap
safeToMappedNodeId, withFilteredLabels
-
-
-
-
Method Detail
-
nodeCount
public long nodeCount()
Description copied from interface:IdMap
Number of mapped nodeIds.
-
nodeCount
public long nodeCount(org.neo4j.gds.NodeLabel nodeLabel)
Description copied from interface:IdMap
Number of mapped nodeIds for a specific node label.
-
rootNodeCount
public java.util.OptionalLong rootNodeCount()
Description copied from interface:PartialIdMap
Number of mapped node ids in the root mapping. This is necessary for nested (filtered) id mappings.- Specified by:
rootNodeCount
in interfacePartialIdMap
-
highestOriginalId
public long highestOriginalId()
Description copied from interface:IdMap
The highest id that is mapped in this id mapping.The value is the upper bound of the original node id space.
- Specified by:
highestOriginalId
in interfaceIdMap
-
characteristics
public GraphCharacteristics characteristics()
- Specified by:
characteristics
in interfaceGraph
-
relationshipCount
public long relationshipCount()
- Specified by:
relationshipCount
in interfaceGraph
- Returns:
- returns the total number of relationships in the graph.
-
batchIterables
public java.util.Collection<org.neo4j.gds.collections.primitive.PrimitiveLongIterable> batchIterables(long batchSize)
- Specified by:
batchIterables
in interfaceBatchNodeIterable
- Returns:
- a collection of iterables over every node, partitioned by the given batch size.
-
forEachNode
public void forEachNode(java.util.function.LongPredicate consumer)
Description copied from interface:NodeIterator
Iterate over each nodeId- Specified by:
forEachNode
in interfaceNodeIterator
-
nodeIterator
public java.util.PrimitiveIterator.OfLong nodeIterator()
- Specified by:
nodeIterator
in interfaceNodeIterator
-
nodeIterator
public java.util.PrimitiveIterator.OfLong nodeIterator(java.util.Set<org.neo4j.gds.NodeLabel> labels)
- Specified by:
nodeIterator
in interfaceNodeIterator
-
nodeProperties
public NodePropertyValues nodeProperties(java.lang.String propertyKey)
Description copied from interface:NodePropertyContainer
Return the property values for a property key NOTE: Avoid using this on the hot path, favor caching the NodeProperties object when possible- Specified by:
nodeProperties
in interfaceNodePropertyContainer
- Parameters:
propertyKey
- the node property key- Returns:
- the values associated with that key
-
availableNodeProperties
public java.util.Set<java.lang.String> availableNodeProperties()
- Specified by:
availableNodeProperties
in interfaceNodePropertyContainer
-
toMappedNodeId
public long toMappedNodeId(long originalNodeId)
Description copied from interface:PartialIdMap
Maps an original node id to a mapped node id. In case of nested id maps, the mapped node id is always in the space of the innermost mapping.- Specified by:
toMappedNodeId
in interfacePartialIdMap
- Parameters:
originalNodeId
- must be smaller or equal to the id returned byIdMap.highestOriginalId()
-
toOriginalNodeId
public long toOriginalNodeId(long mappedNodeId)
Description copied from interface:IdMap
Returns the original node id for the given mapped node id. The original node id is typically the Neo4j node id. This method is guaranteed to always return the Neo4j id, regardless of the given mapped node id refers to a filtered node id space or a regular / unfiltered node id space.- Specified by:
toOriginalNodeId
in interfaceIdMap
-
toRootNodeId
public long toRootNodeId(long mappedNodeId)
Description copied from interface:IdMap
Maps a filtered mapped node id to its root mapped node id. This is necessary for nested (filtered) id mappings. If this mapping is a nested mapping, this method returns the root mapped node id of the parent mapping. For the root mapping this method returns the given node id.- Specified by:
toRootNodeId
in interfaceIdMap
-
rootIdMap
public IdMap rootIdMap()
Description copied from interface:IdMap
Returns the original node mapping if the current node mapping is filtered, otherwise it returns itself.
-
contains
public boolean contains(long originalNodeId)
Description copied from interface:IdMap
Returns true iff the Neo4j id is mapped, otherwise false.
-
relationshipProperty
public double relationshipProperty(long sourceNodeId, long targetNodeId, double fallbackValue)
Description copied from interface:RelationshipProperties
get value of property on relationship between source and target node id- Specified by:
relationshipProperty
in interfaceRelationshipProperties
- Parameters:
sourceNodeId
- source nodetargetNodeId
- target nodefallbackValue
- value to use if relationship has no property value- Returns:
- the property value
-
relationshipProperty
public double relationshipProperty(long sourceNodeId, long targetNodeId)
Description copied from interface:RelationshipProperties
Returns the property value for a relationship defined by its source and target nodes.- Specified by:
relationshipProperty
in interfaceRelationshipProperties
-
relationshipTopologies
public java.util.Map<org.neo4j.gds.RelationshipType,Topology> relationshipTopologies()
- Specified by:
relationshipTopologies
in interfaceCSRGraph
-
forEachRelationship
public void forEachRelationship(long nodeId, RelationshipConsumer consumer)
Description copied from interface:RelationshipIterator
Calls the given consumer function for every relationship of a given node.- Specified by:
forEachRelationship
in interfaceRelationshipIterator
- Parameters:
nodeId
- id of the node for which to iterate relationshipsconsumer
- relationship consumer function
-
forEachRelationship
public void forEachRelationship(long nodeId, double fallbackValue, RelationshipWithPropertyConsumer consumer)
Description copied from interface:RelationshipIterator
Calls the given consumer function for every relationship of a given node. If the graph was loaded with a relationship property, the property value of the relationship will be passed into the consumer, otherwise the given fallback value will be used.- Specified by:
forEachRelationship
in interfaceRelationshipIterator
- Parameters:
nodeId
- id of the node for which to iterate relationshipsfallbackValue
- value used as relationship property if no properties were loadedconsumer
- relationship consumer function
-
forEachInverseRelationship
public void forEachInverseRelationship(long nodeId, RelationshipConsumer consumer)
Description copied from interface:RelationshipIterator
Calls the given consumer for every inverse relationship of a given node. Inverse relationships basically mirror the relationships in that graph. For example, if `Graph.forEachRelationship(42)` returns `1337` then the result of `forEachInverseRelationship(1337)` contains `42. For undirected graphs, accessing the inverse relationships is never supported.Note, that this the inverse index might not always be present. Check
Graph.characteristics()
before calling this method to verify that the graphs is inverse indexed.- Specified by:
forEachInverseRelationship
in interfaceRelationshipIterator
- Parameters:
nodeId
- id of the node for which to iterate the inverse relationshipsconsumer
- relationship consumer function
-
forEachInverseRelationship
public void forEachInverseRelationship(long nodeId, double fallbackValue, RelationshipWithPropertyConsumer consumer)
Description copied from interface:RelationshipIterator
Calls the given consumer for every inverse relationship of a given node. If the graph was loaded with a relationship property, the property value of the relationship will be passed into the consumer, otherwise the given fallback value will be used.Inverse relationships basically mirror the relationships in that graph. For example, if `Graph.forEachRelationship(42)` returns `1337` then the result of `forEachInverseRelationship(1337)` contains `42. For undirected graphs, accessing the inverse relationships is never supported.
Note, that this the inverse index might not always be present. Check
Graph.characteristics()
before calling this method to verify that the graphs is inverse indexed.- Specified by:
forEachInverseRelationship
in interfaceRelationshipIterator
- Parameters:
nodeId
- id of the node for which to iterate the inverse relationshipsfallbackValue
- value used as relationship property if no properties were loadedconsumer
- relationship consumer function
-
streamRelationships
public java.util.stream.Stream<RelationshipCursor> streamRelationships(long nodeId, double fallbackValue)
Description copied from interface:RelationshipIterator
Returns a stream which returns every relationship in the graph starting from the given node id. The id space returned for source and target nodes is the internal id space with respect to the graph this method was called on.The object returned by the stream is a single instance of
RelationshipCursor
. The same instance is used for every element in the stream and should thus not be stored for later use but instead be consumed directly before consuming the next element of the stream.- Specified by:
streamRelationships
in interfaceRelationshipIterator
- Parameters:
nodeId
- id of the node for which to stream the relationshipsfallbackValue
- value used as relationship property if no properties were loaded
-
relationshipTypeFilteredGraph
public Graph relationshipTypeFilteredGraph(java.util.Set<org.neo4j.gds.RelationshipType> relationshipTypes)
- Specified by:
relationshipTypeFilteredGraph
in interfaceGraph
-
degree
public int degree(long nodeId)
Description copied from interface:Degrees
Returns the number of relationships connected to that node. For undirected graphs, this includes outgoing and incoming relationships. For directed graphs, this is the number of outgoing edges.
-
degreeInverse
public int degreeInverse(long nodeId)
Description copied from interface:Degrees
Returns the number of relationships connected to that node. For directed graphs, this is the number of incoming edges. For undirected graphs, the behaviour of this method is undefined. Note, that this is an optional feature, and it is up to the implementation if this is actually supported. CheckGraph.characteristics()
before calling this method to verify that the graphs is inverse indexed.- Specified by:
degreeInverse
in interfaceDegrees
-
degreeWithoutParallelRelationships
public int degreeWithoutParallelRelationships(long nodeId)
Description copied from interface:Degrees
Much slower than just degree() because it may have to look up all relationships.
This is not thread-safe, so if this is called concurrently please useRelationshipIterator.concurrentCopy()
.- Specified by:
degreeWithoutParallelRelationships
in interfaceDegrees
- See Also:
Graph.isMultiGraph()
-
concurrentCopy
public CSRGraph concurrentCopy()
- Specified by:
concurrentCopy
in interfaceCSRGraph
- Specified by:
concurrentCopy
in interfaceGraph
- Specified by:
concurrentCopy
in interfaceRelationshipIterator
- Returns:
- a copy of this iterator that reuses new cursors internally, so that iterations happen independent of other iterations.
-
asNodeFilteredGraph
public java.util.Optional<NodeFilteredGraph> asNodeFilteredGraph()
Description copied from interface:Graph
If this graph is created using a node label filter, this will return a NodeFilteredGraph that represents the node set used in this graph. Be aware that it is not guaranteed to contain all relationships of the graph. Otherwise, it will return an empty Optional.- Specified by:
asNodeFilteredGraph
in interfaceGraph
-
exists
public boolean exists(long sourceNodeId, long targetNodeId)
O(n) !- Specified by:
exists
in interfaceRelationshipPredicate
-
nthTarget
public long nthTarget(long nodeId, int offset)
Description copied from interface:Graph
Get the n-th target node id for a givensourceNodeId
. The order of the targets is not defined and depends on the implementation of the graph, but it is consistent across separate calls to this method on the same graph. ThesourceNodeId
must be a node id existing in the graph. Theoffset
parameter is 0-indexed and must be positive. Ifoffset
is greater than the number of targets forsourceNodeId
,-1
is returned. It is undefined behavior if thesourceNodeId
does not exist in the graph or theoffset
is negative.
-
hasRelationshipProperty
public boolean hasRelationshipProperty()
- Specified by:
hasRelationshipProperty
in interfaceGraph
-
isMultiGraph
public boolean isMultiGraph()
Description copied from interface:Graph
Whether the graph is guaranteed to have no parallel relationships. If this returnsfalse
it still may be parallel-free, but we do not know.- Specified by:
isMultiGraph
in interfaceGraph
- Returns:
true
iff the graph has maximum one relationship between each pair of nodes.
-
relationshipTopology
public CompositeAdjacencyList relationshipTopology()
-
nodeLabels
public java.util.List<org.neo4j.gds.NodeLabel> nodeLabels(long mappedNodeId)
- Specified by:
nodeLabels
in interfaceIdMap
-
forEachNodeLabel
public void forEachNodeLabel(long mappedNodeId, IdMap.NodeLabelConsumer consumer)
- Specified by:
forEachNodeLabel
in interfaceIdMap
-
availableNodeLabels
public java.util.Set<org.neo4j.gds.NodeLabel> availableNodeLabels()
- Specified by:
availableNodeLabels
in interfaceIdMap
-
hasLabel
public boolean hasLabel(long mappedNodeId, org.neo4j.gds.NodeLabel label)
-
isNodeFilteredGraph
public boolean isNodeFilteredGraph()
-
addNodeLabel
public void addNodeLabel(org.neo4j.gds.NodeLabel nodeLabel)
Description copied from interface:IdMap
Adds new node label to the available node labels. The labels is not assigned to any nodes at this point.- Specified by:
addNodeLabel
in interfaceIdMap
- Parameters:
nodeLabel
- the node label to add
-
addNodeIdToLabel
public void addNodeIdToLabel(long mappedNodeId, org.neo4j.gds.NodeLabel nodeLabel)
Description copied from interface:IdMap
Assigns a node to the given node label.- Specified by:
addNodeIdToLabel
in interfaceIdMap
- Parameters:
mappedNodeId
- the node id to assignnodeLabel
- the node label to which the node will be assigned to
-
-