# nebula-algorithm
**Repository Path**: mick-zeng/nebula-algorithm
## Basic Information
- **Project Name**: nebula-algorithm
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-18
- **Last Updated**: 2026-01-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Welcome to Nebula Algorithm
English | 中文
nebula-algorithm is a Spark Application based on [GraphX](https://spark.apache.org/graphx/) with the following Algorithm provided for now:
| Name |Use Case|
|:------------------------:|:---------------:|
| PageRank | page ranking, important node digging|
| Louvain | community digging, hierarchical clustering|
| KCore | community detection, financial risk control|
| LabelPropagation | community detection, consultation propagation, advertising recommendation|
| Hanp | community detection, consultation propagation|
| ConnectedComponent | community detection, isolated island detection|
|StronglyConnectedComponent| community detection|
| ShortestPath | path plan, network plan|
| TriangleCount | network structure analysis|
| GraphTriangleCount | network structure and tightness analysis|
| BetweennessCentrality | important node digging, node influence calculation|
| ClosenessCentrality | important node digging, node influence calculation|
| DegreeStatic | graph structure analysis|
| ClusteringCoefficient | recommended, telecom fraud analysis|
| Jaccard | similarity calculation, recommendation|
| BFS | sequence traversal, Shortest path plan|
| DFS | sequence traversal, Shortest path plan|
| Node2Vec | graph machine learning, recommendation|
You could submit the entire spark application or invoke algorithms in `lib` library to apply graph algorithms for DataFrame.
## Get Nebula Algorithm
1. Build Nebula Algorithm
```
$ git clone https://github.com/vesoft-inc/nebula-algorithm.git
$ cd nebula-algorithm
$ mvn clean package -Dgpg.skip -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
```
After the above buiding process, the target file `nebula-algorithm-3.0-SNAPSHOT.jar` will be placed under `nebula-algorithm/target`.
2. Download from Maven repo
Alternatively, it could be downloaded from the following Maven repo:
https://repo1.maven.org/maven2/com/vesoft/nebula-algorithm/
## Use Nebula Algorithm
* Option 1: Submit nebula-algorithm package
* Configuration
Refer to the [configuration example](https://github.com/vesoft-inc/nebula-algorithm/blob/master/nebula-algorithm/src/main/resources/application.conf).
* Submit Spark Application
```
${SPARK_HOME}/bin/spark-submit --master --class com.vesoft.nebula.algorithm.Main nebula-algorithm-3.0—SNAPSHOT.jar -p application.conf
```
* Option2: Call nebula-algorithm interface
Now there are 10+ algorithms provided in `lib` from `nebula-algorithm`, which could be invoked in a programming fashion as below:
* Add dependencies in `pom.xml`.
```
com.vesoft
nebula-algorithm
3.0.0
```
* Instantiate algorithm's config, below is an example for `PageRank`.
```
import com.vesoft.nebula.algorithm.config.{Configs, PRConfig, SparkConfig}
import org.apache.spark.sql.{DataFrame, SparkSession}
val spark = SparkSession.builder().master("local").getOrCreate()
val data = spark.read.option("header", true).csv("src/test/resources/edge.csv")
val prConfig = new PRConfig(5, 1.0)
val prResult = PageRankAlgo.apply(spark, data, prConfig, false)
```
If your vertex ids are Strings, please set the algo config with encodeId = true. see [examples](https://github.com/vesoft-inc/nebula-algorithm/tree/master/example/src/main/scala/com/vesoft/nebula/algorithm/DegreeStaticExample.scala)
For examples of other algorithms, see [examples](https://github.com/vesoft-inc/nebula-algorithm/tree/master/example/src/main/scala/com/vesoft/nebula/algorithm)
> Note: The first column of DataFrame in the application represents the source vertices, the second represents the target vertices and the third represents edges' weight.
## Sink to NebulaGraph
If you want to write the algorithm execution result into NebulaGraph(`sink: nebula`), make sure there is corresponding property name in your tag defination.
| Algorithm | property name |property type|
|:------------------------:|:-----------------------:|:-----------:|
| pagerank | pagerank |double/string|
| louvain | louvain | int/string |
| kcore | kcore | int/string |
| labelpropagation | lpa | int/string |
| connectedcomponent | cc | int/string |
|stronglyconnectedcomponent| scc | int/string |
| betweenness | betweenness |double/string|
| shortestpath | shortestpath | string |
| degreestatic |degree,inDegree,outDegree| int/string |
| trianglecount | trianglecount | int/string |
| clusteringcoefficient | clustercoefficient |double/string|
| closeness | closeness |double/string|
| hanp | hanp | int/string |
| bfs | bfs | string |
| bfs | dfs | string |
| jaccard | jaccard | string |
| node2vec | node2vec | string |
## Version Compatibility Matrix
| NebulaGraph Algorithm Version | NebulaGraph Version | Spark Version |
| :---------------------------: | :------------------------: | ------------- |
| 2.0.0 | 2.0.0, 2.0.1 | 2.4 |
| 2.1.0 | 2.0.0, 2.0.1 | 2.4 |
| 2.5.0 | 2.5.0, 2.5.1 | 2.4 |
| 2.6.0 | 2.6.0, 2.6.1 | 2.4 |
| 2.6.1 | 2.6.0, 2.6.1 | 2.4 |
| 2.6.2 | 2.6.0, 2.6.1 | 2.4 |
| 3.0.0, 3.1.x | 3.0.x, 3.1.x, 3.2.x, 3.3.x | 2.4 |
| 3.0-SNAPSHOT | nightly | 2.4 |
## Contribute
Nebula Algorithm is open source, you are more than welcomed to contribute in the following ways:
- Discuss in the community via [the forum](https://discuss.nebula-graph.io/) or raise issues here.
- Compose or improve our documents.
- Pull Request to help improve the code itself here.