Skip to main content

Betweenness Centrality

SQL function: cugraph_betweenness_centrality

Official cuGraph reference: C API

Measure how often each vertex lies on shortest paths between other vertex pairs, exactly or from an explicit sample of source vertices.

Signature

cugraph_betweenness_centrality(table_name [, src_col, dst_col [, weight_col [, options_json]]])

Relation inputs

The first positional argument names a registered edge table or view (the edges role). Parenthesized relation subqueries are not accepted; metadata validation uses the same registered name.

Vertex ID types

The edges relation declares the accepted vertex-ID domains. Numeric calls preserve the existing numeric schema. When logical string support is declared, Utf8, LargeUtf8, and Utf8View endpoint columns share one logical domain; their vertex-identity outputs are canonicalized to Utf8.

DomainAccepted endpoint inputsOutput contract
Numeric edge endpointsInt32, Int64The numeric output schema is used for numeric calls.
Logical string edge endpointsUtf8, LargeUtf8, Utf8ViewVertex identity columns are canonicalized to Utf8; scores, distances, counts, coordinates, and opaque labels remain numeric.

The native mapping type is Int64. Call-specific output schemas come from gpu_validate_call.

Logical string side-input limitations:

  • edge ID columns and edge-ID predicate side inputs are not supported for logical string graphs

Scalar arguments & JSON options

Positional scalar arguments

src_col and dst_col name the edge endpoint columns; both are optional and default to src and dst.

ArgumentTypeRequiredDefaultNotes
weight_colUtf8|nullnoaccepted as an edge-column binding; native algorithm execution does not consume weights; semantic effect: none for this algorithm

JSON options

OptionTypeDefaultConstraintsDescription
exact_vertex_thresholdUInt64100000Maximum actual graph vertex count allowed for exact betweenness without explicit seeds or k.
include_endpointsBooleanfalse
kUInt64|nullnullmin 1; mutually exclusive with seedsDeterministic approximate seed count. Execution uses the first k distinct graph vertices in stable order and refuses k larger than the actual vertex count.
normalizedBooleantrue
seedsList<Int64>|List<Utf8>|nullnullmutually exclusive with kExplicit homogeneous integer or string seed vertices for approximate betweenness. Null requests exact all-vertex betweenness unless k is set.

Graph construction options

Graph construction follows the shared defaults (directed=true, renumbering, python_cugraph policy) documented in Graph Construction Options.

Output schema

ColumnTypeNullableDescription
vertexInt64|Utf8noAlgorithm result column.
valueFloat64noAlgorithm result column.

These are generic descriptor schemas; validate the call to get the concrete, table-specific output schema.

Examples

This example runs on the citation network demo dataset.

Exact betweenness on a SQL-defined subgraph

Exact betweenness is refused above exact_vertex_threshold (100k vertices by default), so the full 4.1M-vertex citation graph needs {"k": N} or explicit seeds. A WHERE clause is the cleaner instrument: the 2010s AI literature (same views as the Louvain example) is a ~38k-vertex graph, small enough that every source is used and the scores are exact and deterministic — no sampling options required.

CREATE OR REPLACE VIEW ai_nodes AS
SELECT paper_id FROM papers
WHERE year >= 2010 AND primary_fos IN (
'Deep learning', 'Artificial neural network', 'Convolutional neural network',
'Recurrent neural network', 'Natural language processing',
'Reinforcement learning', 'Image segmentation', 'Feature extraction',
'Object detection', 'Speech recognition');

CREATE OR REPLACE VIEW ai_edges AS
SELECT e.src, e.dst
FROM citation_edges e
JOIN ai_nodes a ON a.paper_id = e.src
JOIN ai_nodes b ON b.paper_id = e.dst;

SELECT p.title, p.year, p.primary_fos, CAST(b.value AS BIGINT) AS paths_through
FROM cugraph_betweenness_centrality('ai_edges', 'src', 'dst', NULL,
'{"normalized": false}') b
JOIN papers p ON p.paper_id = b.vertex
ORDER BY b.value DESC
LIMIT 6;
titleyearprimary_fospaths_through
Deep learning in neural networks2015Deep learning1,107,735
Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation2014Object detection1,053,444
ImageNet Large Scale Visual Recognition Challenge2015Object detection551,882
Squeeze-and-Excitation Networks2017Convolutional neural network535,545
SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size2017Deep learning503,772
Regionlets for Generic Object Detection2013Object detection475,727

With normalized: false the score is a raw count: over one million shortest citation chains inside this subgraph pass through the Deep learning in neural networks survey and through R-CNN. These are the brokers between AI subfields — surveys and boundary-crossing architectures — a different signal than citation volume: none of them is the most-cited paper in the view. The exact call over the 164k-edge subgraph returns in well under a second.

On the full graph, pass a deterministic sample size instead — execution uses the first k distinct graph vertices in stable order and refuses k larger than the actual vertex count:

SELECT * FROM cugraph_betweenness_centrality('citation_edges', 'src', 'dst', NULL,
'{"k": 64, "normalized": false}');

Limitations & lifecycle

No algorithm-specific limitations.

Validate before running

Dry-run validation checks registered relation metadata, column presence, static dtypes, and options only; it does not scan edge data, construct a graph, or prove source-vertex existence:

SELECT * FROM gpu_validate_call(
'cugraph_betweenness_centrality',
'{"schema_version":1,"relations":{"edges":{"table":"target_edges"}},"options":{"src_col":"src","dst_col":"dst"}}'
);

See GPU Function Catalog API for the full gpu_validate_call contract.