This is an automated email from the ASF dual-hosted git repository.
yaozhq pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/geaflow.git
The following commit(s) were added to refs/heads/master by this push:
new 3f7b695c8 feat: support cluster coefficient (#640)
3f7b695c8 is described below
commit 3f7b695c851f4962e6a0aa6d37be3b46eeff781d
Author: kitalkuyo-gita <[email protected]>
AuthorDate: Thu Nov 20 11:16:09 2025 +0800
feat: support cluster coefficient (#640)
* chore: support coefficient
* refactor: enhance logic && add tests
---
.../schema/function/BuildInSqlFunctionTable.java | 2 +
.../geaflow/dsl/udf/graph/ClusterCoefficient.java | 281 ++
.../dsl/runtime/query/GQLAlgorithmTest.java | 38 +
.../src/test/resources/data/large_graph_edge.txt | 3000 ++++++++++++++++++++
.../src/test/resources/data/large_graph_vertex.txt | 1000 +++++++
.../src/test/resources/data/medium_graph_edge.txt | 300 ++
.../test/resources/data/medium_graph_vertex.txt | 100 +
.../expect/gql_algorithm_cluster_coefficient.txt | 6 +
.../gql_algorithm_cluster_coefficient_large.txt | 1000 +++++++
.../gql_algorithm_cluster_coefficient_medium.txt | 100 +
...l_algorithm_cluster_coefficient_with_params.txt | 4 +
.../query/gql_algorithm_cluster_coefficient.sql | 33 +
.../gql_algorithm_cluster_coefficient_large.sql | 60 +
.../gql_algorithm_cluster_coefficient_medium.sql | 60 +
...l_algorithm_cluster_coefficient_with_params.sql | 33 +
15 files changed, 6017 insertions(+)
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/schema/function/BuildInSqlFunctionTable.java
b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/schema/function/BuildInSqlFunctionTable.java
index 06aca5850..185c4bfac 100644
---
a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/schema/function/BuildInSqlFunctionTable.java
+++
b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/schema/function/BuildInSqlFunctionTable.java
@@ -36,6 +36,7 @@ import org.apache.geaflow.dsl.planner.GQLJavaTypeFactory;
import org.apache.geaflow.dsl.schema.GeaFlowFunction;
import org.apache.geaflow.dsl.udf.graph.AllSourceShortestPath;
import org.apache.geaflow.dsl.udf.graph.ClosenessCentrality;
+import org.apache.geaflow.dsl.udf.graph.ClusterCoefficient;
import org.apache.geaflow.dsl.udf.graph.CommonNeighbors;
import org.apache.geaflow.dsl.udf.graph.IncKHopAlgorithm;
import org.apache.geaflow.dsl.udf.graph.IncMinimumSpanningTree;
@@ -217,6 +218,7 @@ public class BuildInSqlFunctionTable extends
ListSqlOperatorTable {
.add(GeaFlowFunction.of(ClosenessCentrality.class))
.add(GeaFlowFunction.of(WeakConnectedComponents.class))
.add(GeaFlowFunction.of(TriangleCount.class))
+ .add(GeaFlowFunction.of(ClusterCoefficient.class))
.add(GeaFlowFunction.of(IncWeakConnectedComponents.class))
.add(GeaFlowFunction.of(CommonNeighbors.class))
.add(GeaFlowFunction.of(JaccardSimilarity.class))
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/graph/ClusterCoefficient.java
b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/graph/ClusterCoefficient.java
new file mode 100644
index 000000000..266195467
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/graph/ClusterCoefficient.java
@@ -0,0 +1,281 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.geaflow.dsl.udf.graph;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import org.apache.geaflow.common.type.primitive.DoubleType;
+import org.apache.geaflow.common.type.primitive.IntegerType;
+import org.apache.geaflow.dsl.common.algo.AlgorithmRuntimeContext;
+import org.apache.geaflow.dsl.common.algo.AlgorithmUserFunction;
+import org.apache.geaflow.dsl.common.data.Row;
+import org.apache.geaflow.dsl.common.data.RowEdge;
+import org.apache.geaflow.dsl.common.data.RowVertex;
+import org.apache.geaflow.dsl.common.data.impl.ObjectRow;
+import org.apache.geaflow.dsl.common.function.Description;
+import org.apache.geaflow.dsl.common.types.GraphSchema;
+import org.apache.geaflow.dsl.common.types.StructType;
+import org.apache.geaflow.dsl.common.types.TableField;
+import org.apache.geaflow.model.graph.edge.EdgeDirection;
+
+/**
+ * ClusterCoefficient Algorithm Implementation.
+ *
+ * <p>The clustering coefficient of a node measures how close its neighbors
are to being
+ * a complete graph (clique). It is calculated as the ratio of the number of
edges between
+ * neighbors to the maximum possible number of edges between them.
+ *
+ * <p>Formula: C(v) = 2 * T(v) / (k(v) * (k(v) - 1))
+ * where:
+ * - T(v) is the number of triangles through node v
+ * - k(v) is the degree of node v
+ *
+ * <p>The algorithm consists of 3 iteration phases:
+ * 1. First iteration: Each node sends its neighbor list to all neighbors
+ * 2. Second iteration: Each node receives neighbor lists and calculates
connections
+ * 3. Third iteration: Output final clustering coefficient results
+ *
+ * <p>Supports parameters:
+ * - vertexType (optional): Filter nodes by vertex type
+ * - minDegree (optional): Minimum degree threshold (default: 2)
+ */
+@Description(name = "cluster_coefficient", description = "built-in udga for
Cluster Coefficient.")
+public class ClusterCoefficient implements AlgorithmUserFunction<Object,
ObjectRow> {
+
+ private AlgorithmRuntimeContext<Object, ObjectRow> context;
+
+ private static final int MAX_ITERATION = 3;
+
+ // Parameters
+ private String vertexType = null;
+ private int minDegree = 2;
+
+ // Exclude set for nodes that don't match the vertex type filter
+ private final Set<Object> excludeSet = Sets.newHashSet();
+
+ @Override
+ public void init(AlgorithmRuntimeContext<Object, ObjectRow> context,
Object[] params) {
+ this.context = context;
+
+ // Validate parameter count
+ if (params.length > 2) {
+ throw new IllegalArgumentException(
+ "Maximum parameter limit exceeded. Expected: [vertexType],
[minDegree]");
+ }
+
+ // Parse parameters based on type
+ // If first param is String, it's vertexType; if it's Integer/Long,
it's minDegree
+ if (params.length >= 1 && params[0] != null) {
+ if (params[0] instanceof String) {
+ // First param is vertexType
+ vertexType = (String) params[0];
+
+ // Second param (if exists) is minDegree
+ if (params.length >= 2 && params[1] != null) {
+ if (!(params[1] instanceof Integer || params[1] instanceof
Long)) {
+ throw new IllegalArgumentException(
+ "Minimum degree parameter should be integer.");
+ }
+ minDegree = params[1] instanceof Integer
+ ? (Integer) params[1]
+ : ((Long) params[1]).intValue();
+ }
+ } else if (params[0] instanceof Integer || params[0] instanceof
Long) {
+ // First param is minDegree (no vertexType filter)
+ vertexType = null;
+ minDegree = params[0] instanceof Integer
+ ? (Integer) params[0]
+ : ((Long) params[0]).intValue();
+ } else {
+ throw new IllegalArgumentException(
+ "Parameter should be either string (vertexType) or integer
(minDegree).");
+ }
+ }
+ }
+
+ @Override
+ public void process(RowVertex vertex, Optional<Row> updatedValues,
Iterator<ObjectRow> messages) {
+ updatedValues.ifPresent(vertex::setValue);
+
+ Object vertexId = vertex.getId();
+ long currentIteration = context.getCurrentIterationId();
+
+ if (currentIteration == 1L) {
+ // First iteration: Check vertex type filter and send neighbor
lists
+ if (Objects.nonNull(vertexType) &&
!vertexType.equals(vertex.getLabel())) {
+ excludeSet.add(vertexId);
+ // Send heartbeat to keep vertex alive
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+ return;
+ }
+
+ // Load all neighbors (both directions for undirected graph)
+ List<RowEdge> edges = context.loadEdges(EdgeDirection.BOTH);
+
+ // Get unique neighbor IDs
+ Set<Object> neighborSet = Sets.newHashSet();
+ for (RowEdge edge : edges) {
+ Object neighborId = edge.getTargetId();
+ if (!excludeSet.contains(neighborId)) {
+ neighborSet.add(neighborId);
+ }
+ }
+
+ int degree = neighborSet.size();
+
+ // For nodes with degree < minDegree, clustering coefficient is 0
+ if (degree < minDegree) {
+ // Store degree and triangle count = 0
+ context.updateVertexValue(ObjectRow.create(degree, 0));
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+ return;
+ }
+
+ // Build neighbor list message: [degree, neighbor1, neighbor2, ...]
+ List<Object> neighborInfo = Lists.newArrayList();
+ neighborInfo.add(degree);
+ neighborInfo.addAll(neighborSet);
+
+ ObjectRow neighborListMsg =
ObjectRow.create(neighborInfo.toArray());
+
+ // Send neighbor list to all neighbors
+ for (Object neighborId : neighborSet) {
+ context.sendMessage(neighborId, neighborListMsg);
+ }
+
+ // Store neighbor list in vertex value for next iteration
+ context.updateVertexValue(neighborListMsg);
+
+ // Send heartbeat to self
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+
+ } else if (currentIteration == 2L) {
+ // Second iteration: Calculate connections between neighbors
+ if (excludeSet.contains(vertexId)) {
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+ return;
+ }
+
+ Row vertexValue = vertex.getValue();
+ if (vertexValue == null) {
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+ return;
+ }
+
+ int degree = (int) vertexValue.getField(0, IntegerType.INSTANCE);
+
+ // For nodes with degree < minDegree, skip calculation
+ if (degree < minDegree) {
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+ return;
+ }
+
+ // Get this vertex's neighbor set
+ Set<Object> myNeighbors = row2Set(vertexValue);
+
+ // Count triangles by checking common neighbors
+ int triangleCount = 0;
+ while (messages.hasNext()) {
+ ObjectRow msg = messages.next();
+
+ // Skip heartbeat messages
+ int msgDegree = (int) msg.getField(0, IntegerType.INSTANCE);
+ if (msgDegree < 0) {
+ continue;
+ }
+
+ // Get neighbor's neighbor set
+ Set<Object> neighborNeighbors = row2Set(msg);
+
+ // Count common neighbors (forming triangles)
+ neighborNeighbors.retainAll(myNeighbors);
+ triangleCount += neighborNeighbors.size();
+ }
+
+ // Store degree and triangle count for final calculation
+ context.updateVertexValue(ObjectRow.create(degree, triangleCount));
+ context.sendMessage(vertexId, ObjectRow.create(-1));
+
+ } else if (currentIteration == 3L) {
+ // Third iteration: Calculate and output clustering coefficient
+ if (excludeSet.contains(vertexId)) {
+ return;
+ }
+
+ Row vertexValue = vertex.getValue();
+ if (vertexValue == null) {
+ return;
+ }
+
+ int degree = (int) vertexValue.getField(0, IntegerType.INSTANCE);
+ int triangleCount = (int) vertexValue.getField(1,
IntegerType.INSTANCE);
+
+ // Calculate clustering coefficient
+ double coefficient;
+ if (degree < minDegree) {
+ coefficient = 0.0;
+ } else {
+ // C(v) = 2 * T(v) / (k(v) * (k(v) - 1))
+ // Note: triangleCount is already counting edges, so we divide
by 2
+ double actualTriangles = triangleCount / 2.0;
+ double maxPossibleEdges = degree * (degree - 1.0);
+ coefficient = maxPossibleEdges > 0
+ ? (2.0 * actualTriangles) / maxPossibleEdges
+ : 0.0;
+ }
+
+ context.take(ObjectRow.create(vertexId, coefficient));
+ }
+ }
+
+ @Override
+ public void finish(RowVertex graphVertex, Optional<Row> updatedValues) {
+ // No action needed in finish
+ }
+
+ @Override
+ public StructType getOutputType(GraphSchema graphSchema) {
+ return new StructType(
+ new TableField("vid", graphSchema.getIdType(), false),
+ new TableField("coefficient", DoubleType.INSTANCE, false)
+ );
+ }
+
+ /**
+ * Convert Row to Set of neighbor IDs.
+ * Row format: [degree, neighbor1, neighbor2, ...]
+ */
+ private Set<Object> row2Set(Row row) {
+ int degree = (int) row.getField(0, IntegerType.INSTANCE);
+ Set<Object> neighborSet = Sets.newHashSet();
+ for (int i = 1; i <= degree; i++) {
+ Object neighborId = row.getField(i,
context.getGraphSchema().getIdType());
+ if (!excludeSet.contains(neighborId)) {
+ neighborSet.add(neighborId);
+ }
+ }
+ return neighborSet;
+ }
+}
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/java/org/apache/geaflow/dsl/runtime/query/GQLAlgorithmTest.java
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/java/org/apache/geaflow/dsl/runtime/query/GQLAlgorithmTest.java
index 2fc903575..0ad33935f 100644
---
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/java/org/apache/geaflow/dsl/runtime/query/GQLAlgorithmTest.java
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/java/org/apache/geaflow/dsl/runtime/query/GQLAlgorithmTest.java
@@ -143,6 +143,44 @@ public class GQLAlgorithmTest {
.checkSinkResult();
}
+ @Test
+ public void testAlgorithmClusterCoefficient() throws Exception {
+ QueryTester
+ .build()
+ .withGraphDefine("/query/modern_graph.sql")
+ .withQueryPath("/query/gql_algorithm_cluster_coefficient.sql")
+ .execute()
+ .checkSinkResult();
+ }
+
+ @Test
+ public void testAlgorithmClusterCoefficientWithParams() throws Exception {
+ QueryTester
+ .build()
+ .withGraphDefine("/query/modern_graph.sql")
+
.withQueryPath("/query/gql_algorithm_cluster_coefficient_with_params.sql")
+ .execute()
+ .checkSinkResult();
+ }
+
+ @Test
+ public void testAlgorithmClusterCoefficientMedium() throws Exception {
+ QueryTester
+ .build()
+
.withQueryPath("/query/gql_algorithm_cluster_coefficient_medium.sql")
+ .execute()
+ .checkSinkResult();
+ }
+
+ @Test
+ public void testAlgorithmClusterCoefficientLarge() throws Exception {
+ QueryTester
+ .build()
+
.withQueryPath("/query/gql_algorithm_cluster_coefficient_large.sql")
+ .execute()
+ .checkSinkResult();
+ }
+
@Test
public void testIncGraphAlgorithm_001() throws Exception {
QueryTester
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/large_graph_edge.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/large_graph_edge.txt
new file mode 100644
index 000000000..ead702159
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/large_graph_edge.txt
@@ -0,0 +1,3000 @@
+1,2
+1,3
+1,4
+1,5
+2,3
+2,4
+2,5
+2,6
+3,4
+3,5
+3,6
+3,7
+4,5
+4,6
+4,7
+4,8
+5,6
+5,7
+5,8
+5,9
+6,7
+6,8
+6,9
+6,10
+7,8
+7,9
+7,10
+7,11
+8,9
+8,10
+8,11
+8,12
+9,10
+9,11
+9,12
+9,13
+10,11
+10,12
+10,13
+10,14
+11,12
+11,13
+11,14
+11,15
+12,13
+12,14
+12,15
+12,16
+13,14
+13,15
+13,16
+13,17
+14,15
+14,16
+14,17
+14,18
+15,16
+15,17
+15,18
+15,19
+16,17
+16,18
+16,19
+16,20
+17,18
+17,19
+17,20
+17,21
+18,19
+18,20
+18,21
+18,22
+19,20
+19,21
+19,22
+19,23
+20,21
+20,22
+20,23
+20,24
+21,22
+21,23
+21,24
+21,25
+22,23
+22,24
+22,25
+22,26
+23,24
+23,25
+23,26
+23,27
+24,25
+24,26
+24,27
+24,28
+25,26
+25,27
+25,28
+25,29
+26,27
+26,28
+26,29
+26,30
+27,28
+27,29
+27,30
+27,31
+28,29
+28,30
+28,31
+28,32
+29,30
+29,31
+29,32
+29,33
+30,31
+30,32
+30,33
+30,34
+31,32
+31,33
+31,34
+31,35
+32,33
+32,34
+32,35
+32,36
+33,34
+33,35
+33,36
+33,37
+34,35
+34,36
+34,37
+34,38
+35,36
+35,37
+35,38
+35,39
+36,37
+36,38
+36,39
+36,40
+37,38
+37,39
+37,40
+37,41
+38,39
+38,40
+38,41
+38,42
+39,40
+39,41
+39,42
+39,43
+40,41
+40,42
+40,43
+40,44
+41,42
+41,43
+41,44
+41,45
+42,43
+42,44
+42,45
+42,46
+43,44
+43,45
+43,46
+43,47
+44,45
+44,46
+44,47
+44,48
+45,46
+45,47
+45,48
+45,49
+46,47
+46,48
+46,49
+46,50
+47,48
+47,49
+47,50
+48,49
+48,50
+49,50
+50,51
+51,52
+51,53
+51,54
+51,55
+52,53
+52,54
+52,55
+52,56
+53,54
+53,55
+53,56
+53,57
+54,55
+54,56
+54,57
+54,58
+55,56
+55,57
+55,58
+55,59
+56,57
+56,58
+56,59
+56,60
+57,58
+57,59
+57,60
+57,61
+58,59
+58,60
+58,61
+58,62
+59,60
+59,61
+59,62
+59,63
+60,61
+60,62
+60,63
+60,64
+61,62
+61,63
+61,64
+61,65
+62,63
+62,64
+62,65
+62,66
+63,64
+63,65
+63,66
+63,67
+64,65
+64,66
+64,67
+64,68
+65,66
+65,67
+65,68
+65,69
+66,67
+66,68
+66,69
+66,70
+67,68
+67,69
+67,70
+67,71
+68,69
+68,70
+68,71
+68,72
+69,70
+69,71
+69,72
+69,73
+70,71
+70,72
+70,73
+70,74
+71,72
+71,73
+71,74
+71,75
+72,73
+72,74
+72,75
+72,76
+73,74
+73,75
+73,76
+73,77
+74,75
+74,76
+74,77
+74,78
+75,76
+75,77
+75,78
+75,79
+76,77
+76,78
+76,79
+76,80
+77,78
+77,79
+77,80
+77,81
+78,79
+78,80
+78,81
+78,82
+79,80
+79,81
+79,82
+79,83
+80,81
+80,82
+80,83
+80,84
+81,82
+81,83
+81,84
+81,85
+82,83
+82,84
+82,85
+82,86
+83,84
+83,85
+83,86
+83,87
+84,85
+84,86
+84,87
+84,88
+85,86
+85,87
+85,88
+85,89
+86,87
+86,88
+86,89
+86,90
+87,88
+87,89
+87,90
+87,91
+88,89
+88,90
+88,91
+88,92
+89,90
+89,91
+89,92
+89,93
+90,91
+90,92
+90,93
+90,94
+91,92
+91,93
+91,94
+91,95
+92,93
+92,94
+92,95
+92,96
+93,94
+93,95
+93,96
+93,97
+94,95
+94,96
+94,97
+94,98
+95,96
+95,97
+95,98
+95,99
+96,97
+96,98
+96,99
+96,100
+97,98
+97,99
+97,100
+98,99
+98,100
+99,100
+100,101
+101,102
+101,103
+101,104
+101,105
+102,103
+102,104
+102,105
+102,106
+103,104
+103,105
+103,106
+103,107
+104,105
+104,106
+104,107
+104,108
+105,106
+105,107
+105,108
+105,109
+106,107
+106,108
+106,109
+106,110
+107,108
+107,109
+107,110
+107,111
+108,109
+108,110
+108,111
+108,112
+109,110
+109,111
+109,112
+109,113
+110,111
+110,112
+110,113
+110,114
+111,112
+111,113
+111,114
+111,115
+112,113
+112,114
+112,115
+112,116
+113,114
+113,115
+113,116
+113,117
+114,115
+114,116
+114,117
+114,118
+115,116
+115,117
+115,118
+115,119
+116,117
+116,118
+116,119
+116,120
+117,118
+117,119
+117,120
+117,121
+118,119
+118,120
+118,121
+118,122
+119,120
+119,121
+119,122
+119,123
+120,121
+120,122
+120,123
+120,124
+121,122
+121,123
+121,124
+121,125
+122,123
+122,124
+122,125
+122,126
+123,124
+123,125
+123,126
+123,127
+124,125
+124,126
+124,127
+124,128
+125,126
+125,127
+125,128
+125,129
+126,127
+126,128
+126,129
+126,130
+127,128
+127,129
+127,130
+127,131
+128,129
+128,130
+128,131
+128,132
+129,130
+129,131
+129,132
+129,133
+130,131
+130,132
+130,133
+130,134
+131,132
+131,133
+131,134
+131,135
+132,133
+132,134
+132,135
+132,136
+133,134
+133,135
+133,136
+133,137
+134,135
+134,136
+134,137
+134,138
+135,136
+135,137
+135,138
+135,139
+136,137
+136,138
+136,139
+136,140
+137,138
+137,139
+137,140
+137,141
+138,139
+138,140
+138,141
+138,142
+139,140
+139,141
+139,142
+139,143
+140,141
+140,142
+140,143
+140,144
+141,142
+141,143
+141,144
+141,145
+142,143
+142,144
+142,145
+142,146
+143,144
+143,145
+143,146
+143,147
+144,145
+144,146
+144,147
+144,148
+145,146
+145,147
+145,148
+145,149
+146,147
+146,148
+146,149
+146,150
+147,148
+147,149
+147,150
+148,149
+148,150
+149,150
+150,151
+151,152
+151,153
+151,154
+151,155
+152,153
+152,154
+152,155
+152,156
+153,154
+153,155
+153,156
+153,157
+154,155
+154,156
+154,157
+154,158
+155,156
+155,157
+155,158
+155,159
+156,157
+156,158
+156,159
+156,160
+157,158
+157,159
+157,160
+157,161
+158,159
+158,160
+158,161
+158,162
+159,160
+159,161
+159,162
+159,163
+160,161
+160,162
+160,163
+160,164
+161,162
+161,163
+161,164
+161,165
+162,163
+162,164
+162,165
+162,166
+163,164
+163,165
+163,166
+163,167
+164,165
+164,166
+164,167
+164,168
+165,166
+165,167
+165,168
+165,169
+166,167
+166,168
+166,169
+166,170
+167,168
+167,169
+167,170
+167,171
+168,169
+168,170
+168,171
+168,172
+169,170
+169,171
+169,172
+169,173
+170,171
+170,172
+170,173
+170,174
+171,172
+171,173
+171,174
+171,175
+172,173
+172,174
+172,175
+172,176
+173,174
+173,175
+173,176
+173,177
+174,175
+174,176
+174,177
+174,178
+175,176
+175,177
+175,178
+175,179
+176,177
+176,178
+176,179
+176,180
+177,178
+177,179
+177,180
+177,181
+178,179
+178,180
+178,181
+178,182
+179,180
+179,181
+179,182
+179,183
+180,181
+180,182
+180,183
+180,184
+181,182
+181,183
+181,184
+181,185
+182,183
+182,184
+182,185
+182,186
+183,184
+183,185
+183,186
+183,187
+184,185
+184,186
+184,187
+184,188
+185,186
+185,187
+185,188
+185,189
+186,187
+186,188
+186,189
+186,190
+187,188
+187,189
+187,190
+187,191
+188,189
+188,190
+188,191
+188,192
+189,190
+189,191
+189,192
+189,193
+190,191
+190,192
+190,193
+190,194
+191,192
+191,193
+191,194
+191,195
+192,193
+192,194
+192,195
+192,196
+193,194
+193,195
+193,196
+193,197
+194,195
+194,196
+194,197
+194,198
+195,196
+195,197
+195,198
+195,199
+196,197
+196,198
+196,199
+196,200
+197,198
+197,199
+197,200
+198,199
+198,200
+199,200
+200,201
+201,202
+201,203
+201,204
+201,205
+202,203
+202,204
+202,205
+202,206
+203,204
+203,205
+203,206
+203,207
+204,205
+204,206
+204,207
+204,208
+205,206
+205,207
+205,208
+205,209
+206,207
+206,208
+206,209
+206,210
+207,208
+207,209
+207,210
+207,211
+208,209
+208,210
+208,211
+208,212
+209,210
+209,211
+209,212
+209,213
+210,211
+210,212
+210,213
+210,214
+211,212
+211,213
+211,214
+211,215
+212,213
+212,214
+212,215
+212,216
+213,214
+213,215
+213,216
+213,217
+214,215
+214,216
+214,217
+214,218
+215,216
+215,217
+215,218
+215,219
+216,217
+216,218
+216,219
+216,220
+217,218
+217,219
+217,220
+217,221
+218,219
+218,220
+218,221
+218,222
+219,220
+219,221
+219,222
+219,223
+220,221
+220,222
+220,223
+220,224
+221,222
+221,223
+221,224
+221,225
+222,223
+222,224
+222,225
+222,226
+223,224
+223,225
+223,226
+223,227
+224,225
+224,226
+224,227
+224,228
+225,226
+225,227
+225,228
+225,229
+226,227
+226,228
+226,229
+226,230
+227,228
+227,229
+227,230
+227,231
+228,229
+228,230
+228,231
+228,232
+229,230
+229,231
+229,232
+229,233
+230,231
+230,232
+230,233
+230,234
+231,232
+231,233
+231,234
+231,235
+232,233
+232,234
+232,235
+232,236
+233,234
+233,235
+233,236
+233,237
+234,235
+234,236
+234,237
+234,238
+235,236
+235,237
+235,238
+235,239
+236,237
+236,238
+236,239
+236,240
+237,238
+237,239
+237,240
+237,241
+238,239
+238,240
+238,241
+238,242
+239,240
+239,241
+239,242
+239,243
+240,241
+240,242
+240,243
+240,244
+241,242
+241,243
+241,244
+241,245
+242,243
+242,244
+242,245
+242,246
+243,244
+243,245
+243,246
+243,247
+244,245
+244,246
+244,247
+244,248
+245,246
+245,247
+245,248
+245,249
+246,247
+246,248
+246,249
+246,250
+247,248
+247,249
+247,250
+248,249
+248,250
+249,250
+250,251
+251,252
+251,253
+251,254
+251,255
+252,253
+252,254
+252,255
+252,256
+253,254
+253,255
+253,256
+253,257
+254,255
+254,256
+254,257
+254,258
+255,256
+255,257
+255,258
+255,259
+256,257
+256,258
+256,259
+256,260
+257,258
+257,259
+257,260
+257,261
+258,259
+258,260
+258,261
+258,262
+259,260
+259,261
+259,262
+259,263
+260,261
+260,262
+260,263
+260,264
+261,262
+261,263
+261,264
+261,265
+262,263
+262,264
+262,265
+262,266
+263,264
+263,265
+263,266
+263,267
+264,265
+264,266
+264,267
+264,268
+265,266
+265,267
+265,268
+265,269
+266,267
+266,268
+266,269
+266,270
+267,268
+267,269
+267,270
+267,271
+268,269
+268,270
+268,271
+268,272
+269,270
+269,271
+269,272
+269,273
+270,271
+270,272
+270,273
+270,274
+271,272
+271,273
+271,274
+271,275
+272,273
+272,274
+272,275
+272,276
+273,274
+273,275
+273,276
+273,277
+274,275
+274,276
+274,277
+274,278
+275,276
+275,277
+275,278
+275,279
+276,277
+276,278
+276,279
+276,280
+277,278
+277,279
+277,280
+277,281
+278,279
+278,280
+278,281
+278,282
+279,280
+279,281
+279,282
+279,283
+280,281
+280,282
+280,283
+280,284
+281,282
+281,283
+281,284
+281,285
+282,283
+282,284
+282,285
+282,286
+283,284
+283,285
+283,286
+283,287
+284,285
+284,286
+284,287
+284,288
+285,286
+285,287
+285,288
+285,289
+286,287
+286,288
+286,289
+286,290
+287,288
+287,289
+287,290
+287,291
+288,289
+288,290
+288,291
+288,292
+289,290
+289,291
+289,292
+289,293
+290,291
+290,292
+290,293
+290,294
+291,292
+291,293
+291,294
+291,295
+292,293
+292,294
+292,295
+292,296
+293,294
+293,295
+293,296
+293,297
+294,295
+294,296
+294,297
+294,298
+295,296
+295,297
+295,298
+295,299
+296,297
+296,298
+296,299
+296,300
+297,298
+297,299
+297,300
+298,299
+298,300
+299,300
+300,301
+301,302
+301,303
+301,304
+301,305
+302,303
+302,304
+302,305
+302,306
+303,304
+303,305
+303,306
+303,307
+304,305
+304,306
+304,307
+304,308
+305,306
+305,307
+305,308
+305,309
+306,307
+306,308
+306,309
+306,310
+307,308
+307,309
+307,310
+307,311
+308,309
+308,310
+308,311
+308,312
+309,310
+309,311
+309,312
+309,313
+310,311
+310,312
+310,313
+310,314
+311,312
+311,313
+311,314
+311,315
+312,313
+312,314
+312,315
+312,316
+313,314
+313,315
+313,316
+313,317
+314,315
+314,316
+314,317
+314,318
+315,316
+315,317
+315,318
+315,319
+316,317
+316,318
+316,319
+316,320
+317,318
+317,319
+317,320
+317,321
+318,319
+318,320
+318,321
+318,322
+319,320
+319,321
+319,322
+319,323
+320,321
+320,322
+320,323
+320,324
+321,322
+321,323
+321,324
+321,325
+322,323
+322,324
+322,325
+322,326
+323,324
+323,325
+323,326
+323,327
+324,325
+324,326
+324,327
+324,328
+325,326
+325,327
+325,328
+325,329
+326,327
+326,328
+326,329
+326,330
+327,328
+327,329
+327,330
+327,331
+328,329
+328,330
+328,331
+328,332
+329,330
+329,331
+329,332
+329,333
+330,331
+330,332
+330,333
+330,334
+331,332
+331,333
+331,334
+331,335
+332,333
+332,334
+332,335
+332,336
+333,334
+333,335
+333,336
+333,337
+334,335
+334,336
+334,337
+334,338
+335,336
+335,337
+335,338
+335,339
+336,337
+336,338
+336,339
+336,340
+337,338
+337,339
+337,340
+337,341
+338,339
+338,340
+338,341
+338,342
+339,340
+339,341
+339,342
+339,343
+340,341
+340,342
+340,343
+340,344
+341,342
+341,343
+341,344
+341,345
+342,343
+342,344
+342,345
+342,346
+343,344
+343,345
+343,346
+343,347
+344,345
+344,346
+344,347
+344,348
+345,346
+345,347
+345,348
+345,349
+346,347
+346,348
+346,349
+346,350
+347,348
+347,349
+347,350
+348,349
+348,350
+349,350
+350,351
+351,352
+351,353
+351,354
+351,355
+352,353
+352,354
+352,355
+352,356
+353,354
+353,355
+353,356
+353,357
+354,355
+354,356
+354,357
+354,358
+355,356
+355,357
+355,358
+355,359
+356,357
+356,358
+356,359
+356,360
+357,358
+357,359
+357,360
+357,361
+358,359
+358,360
+358,361
+358,362
+359,360
+359,361
+359,362
+359,363
+360,361
+360,362
+360,363
+360,364
+361,362
+361,363
+361,364
+361,365
+362,363
+362,364
+362,365
+362,366
+363,364
+363,365
+363,366
+363,367
+364,365
+364,366
+364,367
+364,368
+365,366
+365,367
+365,368
+365,369
+366,367
+366,368
+366,369
+366,370
+367,368
+367,369
+367,370
+367,371
+368,369
+368,370
+368,371
+368,372
+369,370
+369,371
+369,372
+369,373
+370,371
+370,372
+370,373
+370,374
+371,372
+371,373
+371,374
+371,375
+372,373
+372,374
+372,375
+372,376
+373,374
+373,375
+373,376
+373,377
+374,375
+374,376
+374,377
+374,378
+375,376
+375,377
+375,378
+375,379
+376,377
+376,378
+376,379
+376,380
+377,378
+377,379
+377,380
+377,381
+378,379
+378,380
+378,381
+378,382
+379,380
+379,381
+379,382
+379,383
+380,381
+380,382
+380,383
+380,384
+381,382
+381,383
+381,384
+381,385
+382,383
+382,384
+382,385
+382,386
+383,384
+383,385
+383,386
+383,387
+384,385
+384,386
+384,387
+384,388
+385,386
+385,387
+385,388
+385,389
+386,387
+386,388
+386,389
+386,390
+387,388
+387,389
+387,390
+387,391
+388,389
+388,390
+388,391
+388,392
+389,390
+389,391
+389,392
+389,393
+390,391
+390,392
+390,393
+390,394
+391,392
+391,393
+391,394
+391,395
+392,393
+392,394
+392,395
+392,396
+393,394
+393,395
+393,396
+393,397
+394,395
+394,396
+394,397
+394,398
+395,396
+395,397
+395,398
+395,399
+396,397
+396,398
+396,399
+396,400
+397,398
+397,399
+397,400
+398,399
+398,400
+399,400
+400,401
+401,402
+401,403
+401,404
+401,405
+402,403
+402,404
+402,405
+402,406
+403,404
+403,405
+403,406
+403,407
+404,405
+404,406
+404,407
+404,408
+405,406
+405,407
+405,408
+405,409
+406,407
+406,408
+406,409
+406,410
+407,408
+407,409
+407,410
+407,411
+408,409
+408,410
+408,411
+408,412
+409,410
+409,411
+409,412
+409,413
+410,411
+410,412
+410,413
+410,414
+411,412
+411,413
+411,414
+411,415
+412,413
+412,414
+412,415
+412,416
+413,414
+413,415
+413,416
+413,417
+414,415
+414,416
+414,417
+414,418
+415,416
+415,417
+415,418
+415,419
+416,417
+416,418
+416,419
+416,420
+417,418
+417,419
+417,420
+417,421
+418,419
+418,420
+418,421
+418,422
+419,420
+419,421
+419,422
+419,423
+420,421
+420,422
+420,423
+420,424
+421,422
+421,423
+421,424
+421,425
+422,423
+422,424
+422,425
+422,426
+423,424
+423,425
+423,426
+423,427
+424,425
+424,426
+424,427
+424,428
+425,426
+425,427
+425,428
+425,429
+426,427
+426,428
+426,429
+426,430
+427,428
+427,429
+427,430
+427,431
+428,429
+428,430
+428,431
+428,432
+429,430
+429,431
+429,432
+429,433
+430,431
+430,432
+430,433
+430,434
+431,432
+431,433
+431,434
+431,435
+432,433
+432,434
+432,435
+432,436
+433,434
+433,435
+433,436
+433,437
+434,435
+434,436
+434,437
+434,438
+435,436
+435,437
+435,438
+435,439
+436,437
+436,438
+436,439
+436,440
+437,438
+437,439
+437,440
+437,441
+438,439
+438,440
+438,441
+438,442
+439,440
+439,441
+439,442
+439,443
+440,441
+440,442
+440,443
+440,444
+441,442
+441,443
+441,444
+441,445
+442,443
+442,444
+442,445
+442,446
+443,444
+443,445
+443,446
+443,447
+444,445
+444,446
+444,447
+444,448
+445,446
+445,447
+445,448
+445,449
+446,447
+446,448
+446,449
+446,450
+447,448
+447,449
+447,450
+448,449
+448,450
+449,450
+450,451
+451,452
+451,453
+451,454
+451,455
+452,453
+452,454
+452,455
+452,456
+453,454
+453,455
+453,456
+453,457
+454,455
+454,456
+454,457
+454,458
+455,456
+455,457
+455,458
+455,459
+456,457
+456,458
+456,459
+456,460
+457,458
+457,459
+457,460
+457,461
+458,459
+458,460
+458,461
+458,462
+459,460
+459,461
+459,462
+459,463
+460,461
+460,462
+460,463
+460,464
+461,462
+461,463
+461,464
+461,465
+462,463
+462,464
+462,465
+462,466
+463,464
+463,465
+463,466
+463,467
+464,465
+464,466
+464,467
+464,468
+465,466
+465,467
+465,468
+465,469
+466,467
+466,468
+466,469
+466,470
+467,468
+467,469
+467,470
+467,471
+468,469
+468,470
+468,471
+468,472
+469,470
+469,471
+469,472
+469,473
+470,471
+470,472
+470,473
+470,474
+471,472
+471,473
+471,474
+471,475
+472,473
+472,474
+472,475
+472,476
+473,474
+473,475
+473,476
+473,477
+474,475
+474,476
+474,477
+474,478
+475,476
+475,477
+475,478
+475,479
+476,477
+476,478
+476,479
+476,480
+477,478
+477,479
+477,480
+477,481
+478,479
+478,480
+478,481
+478,482
+479,480
+479,481
+479,482
+479,483
+480,481
+480,482
+480,483
+480,484
+481,482
+481,483
+481,484
+481,485
+482,483
+482,484
+482,485
+482,486
+483,484
+483,485
+483,486
+483,487
+484,485
+484,486
+484,487
+484,488
+485,486
+485,487
+485,488
+485,489
+486,487
+486,488
+486,489
+486,490
+487,488
+487,489
+487,490
+487,491
+488,489
+488,490
+488,491
+488,492
+489,490
+489,491
+489,492
+489,493
+490,491
+490,492
+490,493
+490,494
+491,492
+491,493
+491,494
+491,495
+492,493
+492,494
+492,495
+492,496
+493,494
+493,495
+493,496
+493,497
+494,495
+494,496
+494,497
+494,498
+495,496
+495,497
+495,498
+495,499
+496,497
+496,498
+496,499
+496,500
+497,498
+497,499
+497,500
+498,499
+498,500
+499,500
+500,501
+501,502
+501,503
+501,504
+501,505
+502,503
+502,504
+502,505
+502,506
+503,504
+503,505
+503,506
+503,507
+504,505
+504,506
+504,507
+504,508
+505,506
+505,507
+505,508
+505,509
+506,507
+506,508
+506,509
+506,510
+507,508
+507,509
+507,510
+507,511
+508,509
+508,510
+508,511
+508,512
+509,510
+509,511
+509,512
+509,513
+510,511
+510,512
+510,513
+510,514
+511,512
+511,513
+511,514
+511,515
+512,513
+512,514
+512,515
+512,516
+513,514
+513,515
+513,516
+513,517
+514,515
+514,516
+514,517
+514,518
+515,516
+515,517
+515,518
+515,519
+516,517
+516,518
+516,519
+516,520
+517,518
+517,519
+517,520
+517,521
+518,519
+518,520
+518,521
+518,522
+519,520
+519,521
+519,522
+519,523
+520,521
+520,522
+520,523
+520,524
+521,522
+521,523
+521,524
+521,525
+522,523
+522,524
+522,525
+522,526
+523,524
+523,525
+523,526
+523,527
+524,525
+524,526
+524,527
+524,528
+525,526
+525,527
+525,528
+525,529
+526,527
+526,528
+526,529
+526,530
+527,528
+527,529
+527,530
+527,531
+528,529
+528,530
+528,531
+528,532
+529,530
+529,531
+529,532
+529,533
+530,531
+530,532
+530,533
+530,534
+531,532
+531,533
+531,534
+531,535
+532,533
+532,534
+532,535
+532,536
+533,534
+533,535
+533,536
+533,537
+534,535
+534,536
+534,537
+534,538
+535,536
+535,537
+535,538
+535,539
+536,537
+536,538
+536,539
+536,540
+537,538
+537,539
+537,540
+537,541
+538,539
+538,540
+538,541
+538,542
+539,540
+539,541
+539,542
+539,543
+540,541
+540,542
+540,543
+540,544
+541,542
+541,543
+541,544
+541,545
+542,543
+542,544
+542,545
+542,546
+543,544
+543,545
+543,546
+543,547
+544,545
+544,546
+544,547
+544,548
+545,546
+545,547
+545,548
+545,549
+546,547
+546,548
+546,549
+546,550
+547,548
+547,549
+547,550
+548,549
+548,550
+549,550
+550,551
+551,552
+551,553
+551,554
+551,555
+552,553
+552,554
+552,555
+552,556
+553,554
+553,555
+553,556
+553,557
+554,555
+554,556
+554,557
+554,558
+555,556
+555,557
+555,558
+555,559
+556,557
+556,558
+556,559
+556,560
+557,558
+557,559
+557,560
+557,561
+558,559
+558,560
+558,561
+558,562
+559,560
+559,561
+559,562
+559,563
+560,561
+560,562
+560,563
+560,564
+561,562
+561,563
+561,564
+561,565
+562,563
+562,564
+562,565
+562,566
+563,564
+563,565
+563,566
+563,567
+564,565
+564,566
+564,567
+564,568
+565,566
+565,567
+565,568
+565,569
+566,567
+566,568
+566,569
+566,570
+567,568
+567,569
+567,570
+567,571
+568,569
+568,570
+568,571
+568,572
+569,570
+569,571
+569,572
+569,573
+570,571
+570,572
+570,573
+570,574
+571,572
+571,573
+571,574
+571,575
+572,573
+572,574
+572,575
+572,576
+573,574
+573,575
+573,576
+573,577
+574,575
+574,576
+574,577
+574,578
+575,576
+575,577
+575,578
+575,579
+576,577
+576,578
+576,579
+576,580
+577,578
+577,579
+577,580
+577,581
+578,579
+578,580
+578,581
+578,582
+579,580
+579,581
+579,582
+579,583
+580,581
+580,582
+580,583
+580,584
+581,582
+581,583
+581,584
+581,585
+582,583
+582,584
+582,585
+582,586
+583,584
+583,585
+583,586
+583,587
+584,585
+584,586
+584,587
+584,588
+585,586
+585,587
+585,588
+585,589
+586,587
+586,588
+586,589
+586,590
+587,588
+587,589
+587,590
+587,591
+588,589
+588,590
+588,591
+588,592
+589,590
+589,591
+589,592
+589,593
+590,591
+590,592
+590,593
+590,594
+591,592
+591,593
+591,594
+591,595
+592,593
+592,594
+592,595
+592,596
+593,594
+593,595
+593,596
+593,597
+594,595
+594,596
+594,597
+594,598
+595,596
+595,597
+595,598
+595,599
+596,597
+596,598
+596,599
+596,600
+597,598
+597,599
+597,600
+598,599
+598,600
+599,600
+600,601
+601,602
+601,603
+601,604
+601,605
+602,603
+602,604
+602,605
+602,606
+603,604
+603,605
+603,606
+603,607
+604,605
+604,606
+604,607
+604,608
+605,606
+605,607
+605,608
+605,609
+606,607
+606,608
+606,609
+606,610
+607,608
+607,609
+607,610
+607,611
+608,609
+608,610
+608,611
+608,612
+609,610
+609,611
+609,612
+609,613
+610,611
+610,612
+610,613
+610,614
+611,612
+611,613
+611,614
+611,615
+612,613
+612,614
+612,615
+612,616
+613,614
+613,615
+613,616
+613,617
+614,615
+614,616
+614,617
+614,618
+615,616
+615,617
+615,618
+615,619
+616,617
+616,618
+616,619
+616,620
+617,618
+617,619
+617,620
+617,621
+618,619
+618,620
+618,621
+618,622
+619,620
+619,621
+619,622
+619,623
+620,621
+620,622
+620,623
+620,624
+621,622
+621,623
+621,624
+621,625
+622,623
+622,624
+622,625
+622,626
+623,624
+623,625
+623,626
+623,627
+624,625
+624,626
+624,627
+624,628
+625,626
+625,627
+625,628
+625,629
+626,627
+626,628
+626,629
+626,630
+627,628
+627,629
+627,630
+627,631
+628,629
+628,630
+628,631
+628,632
+629,630
+629,631
+629,632
+629,633
+630,631
+630,632
+630,633
+630,634
+631,632
+631,633
+631,634
+631,635
+632,633
+632,634
+632,635
+632,636
+633,634
+633,635
+633,636
+633,637
+634,635
+634,636
+634,637
+634,638
+635,636
+635,637
+635,638
+635,639
+636,637
+636,638
+636,639
+636,640
+637,638
+637,639
+637,640
+637,641
+638,639
+638,640
+638,641
+638,642
+639,640
+639,641
+639,642
+639,643
+640,641
+640,642
+640,643
+640,644
+641,642
+641,643
+641,644
+641,645
+642,643
+642,644
+642,645
+642,646
+643,644
+643,645
+643,646
+643,647
+644,645
+644,646
+644,647
+644,648
+645,646
+645,647
+645,648
+645,649
+646,647
+646,648
+646,649
+646,650
+647,648
+647,649
+647,650
+648,649
+648,650
+649,650
+650,651
+651,652
+651,653
+651,654
+651,655
+652,653
+652,654
+652,655
+652,656
+653,654
+653,655
+653,656
+653,657
+654,655
+654,656
+654,657
+654,658
+655,656
+655,657
+655,658
+655,659
+656,657
+656,658
+656,659
+656,660
+657,658
+657,659
+657,660
+657,661
+658,659
+658,660
+658,661
+658,662
+659,660
+659,661
+659,662
+659,663
+660,661
+660,662
+660,663
+660,664
+661,662
+661,663
+661,664
+661,665
+662,663
+662,664
+662,665
+662,666
+663,664
+663,665
+663,666
+663,667
+664,665
+664,666
+664,667
+664,668
+665,666
+665,667
+665,668
+665,669
+666,667
+666,668
+666,669
+666,670
+667,668
+667,669
+667,670
+667,671
+668,669
+668,670
+668,671
+668,672
+669,670
+669,671
+669,672
+669,673
+670,671
+670,672
+670,673
+670,674
+671,672
+671,673
+671,674
+671,675
+672,673
+672,674
+672,675
+672,676
+673,674
+673,675
+673,676
+673,677
+674,675
+674,676
+674,677
+674,678
+675,676
+675,677
+675,678
+675,679
+676,677
+676,678
+676,679
+676,680
+677,678
+677,679
+677,680
+677,681
+678,679
+678,680
+678,681
+678,682
+679,680
+679,681
+679,682
+679,683
+680,681
+680,682
+680,683
+680,684
+681,682
+681,683
+681,684
+681,685
+682,683
+682,684
+682,685
+682,686
+683,684
+683,685
+683,686
+683,687
+684,685
+684,686
+684,687
+684,688
+685,686
+685,687
+685,688
+685,689
+686,687
+686,688
+686,689
+686,690
+687,688
+687,689
+687,690
+687,691
+688,689
+688,690
+688,691
+688,692
+689,690
+689,691
+689,692
+689,693
+690,691
+690,692
+690,693
+690,694
+691,692
+691,693
+691,694
+691,695
+692,693
+692,694
+692,695
+692,696
+693,694
+693,695
+693,696
+693,697
+694,695
+694,696
+694,697
+694,698
+695,696
+695,697
+695,698
+695,699
+696,697
+696,698
+696,699
+696,700
+697,698
+697,699
+697,700
+698,699
+698,700
+699,700
+700,701
+701,702
+701,703
+701,704
+701,705
+702,703
+702,704
+702,705
+702,706
+703,704
+703,705
+703,706
+703,707
+704,705
+704,706
+704,707
+704,708
+705,706
+705,707
+705,708
+705,709
+706,707
+706,708
+706,709
+706,710
+707,708
+707,709
+707,710
+707,711
+708,709
+708,710
+708,711
+708,712
+709,710
+709,711
+709,712
+710,711
+711,712
+712,713
+713,714
+714,715
+715,716
+716,717
+717,718
+718,719
+719,720
+720,721
+721,722
+722,723
+723,724
+724,725
+725,726
+726,727
+727,728
+728,729
+729,730
+730,731
+731,732
+732,733
+733,734
+734,735
+735,736
+736,737
+737,738
+738,739
+739,740
+740,741
+741,742
+742,743
+743,744
+744,745
+745,746
+746,747
+747,748
+748,749
+749,750
+750,751
+751,752
+752,753
+753,754
+754,755
+755,756
+756,757
+757,758
+758,759
+759,760
+760,761
+761,762
+762,763
+763,764
+764,765
+765,766
+766,767
+767,768
+768,769
+769,770
+770,771
+771,772
+772,773
+773,774
+774,775
+775,776
+776,777
+777,778
+778,779
+779,780
+780,781
+781,782
+782,783
+783,784
+784,785
+785,786
+786,787
+787,788
+788,789
+789,790
+790,791
+791,792
+792,793
+793,794
+794,795
+795,796
+796,797
+797,798
+798,799
+799,800
+800,801
+801,802
+802,803
+803,804
+804,805
+805,806
+806,807
+807,808
+808,809
+809,810
+810,811
+811,812
+812,813
+813,814
+814,815
+815,816
+816,817
+817,818
+818,819
+819,820
+820,821
+821,822
+822,823
+823,824
+824,825
+825,826
+826,827
+827,828
+828,829
+829,830
+830,831
+831,832
+832,833
+833,834
+834,835
+835,836
+836,837
+837,838
+838,839
+839,840
+840,841
+841,842
+842,843
+843,844
+844,845
+845,846
+846,847
+847,848
+848,849
+849,850
+850,851
+851,852
+852,853
+853,854
+854,855
+855,856
+856,857
+857,858
+858,859
+859,860
+860,861
+861,862
+862,863
+863,864
+864,865
+865,866
+866,867
+867,868
+868,869
+869,870
+870,871
+871,872
+872,873
+873,874
+874,875
+875,876
+876,877
+877,878
+878,879
+879,880
+880,881
+881,882
+882,883
+883,884
+884,885
+885,886
+886,887
+887,888
+888,889
+889,890
+890,891
+891,892
+892,893
+893,894
+894,895
+895,896
+896,897
+897,898
+898,899
+899,900
+900,901
+901,902
+902,903
+903,904
+904,905
+905,906
+906,907
+907,908
+908,909
+909,910
+910,911
+911,912
+912,913
+913,914
+914,915
+915,916
+916,917
+917,918
+918,919
+919,920
+920,921
+921,922
+922,923
+923,924
+924,925
+925,926
+926,927
+927,928
+928,929
+929,930
+930,931
+931,932
+932,933
+933,934
+934,935
+935,936
+936,937
+937,938
+938,939
+939,940
+940,941
+941,942
+942,943
+943,944
+944,945
+945,946
+946,947
+947,948
+948,949
+949,950
+950,951
+951,952
+952,953
+953,954
+954,955
+955,956
+956,957
+957,958
+958,959
+959,960
+960,961
+961,962
+962,963
+963,964
+964,965
+965,966
+966,967
+967,968
+968,969
+969,970
+970,971
+971,972
+972,973
+973,974
+974,975
+975,976
+976,977
+977,978
+978,979
+979,980
+980,981
+981,982
+982,983
+983,984
+984,985
+985,986
+986,987
+987,988
+988,989
+989,990
+990,991
+991,992
+992,993
+993,994
+994,995
+995,996
+996,997
+997,998
+998,999
+999,1000
+1000,1
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/large_graph_vertex.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/large_graph_vertex.txt
new file mode 100644
index 000000000..7d6f2e7e0
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/large_graph_vertex.txt
@@ -0,0 +1,1000 @@
+1,person_1,1
+2,person_2,2
+3,person_3,3
+4,software_4,python
+5,person_5,5
+6,person_6,6
+7,person_7,7
+8,software_8,python
+9,person_9,9
+10,person_10,10
+11,person_11,11
+12,software_12,python
+13,person_13,13
+14,person_14,14
+15,person_15,15
+16,software_16,python
+17,person_17,17
+18,person_18,18
+19,person_19,19
+20,software_20,python
+21,person_21,21
+22,person_22,22
+23,person_23,23
+24,software_24,python
+25,person_25,25
+26,person_26,26
+27,person_27,27
+28,software_28,python
+29,person_29,29
+30,person_30,30
+31,person_31,31
+32,software_32,python
+33,person_33,33
+34,person_34,34
+35,person_35,35
+36,software_36,python
+37,person_37,37
+38,person_38,38
+39,person_39,39
+40,software_40,python
+41,person_41,41
+42,person_42,42
+43,person_43,43
+44,software_44,python
+45,person_45,45
+46,person_46,46
+47,person_47,47
+48,software_48,python
+49,person_49,49
+50,person_50,50
+51,person_51,51
+52,software_52,python
+53,person_53,53
+54,person_54,54
+55,person_55,55
+56,software_56,python
+57,person_57,57
+58,person_58,58
+59,person_59,59
+60,software_60,python
+61,person_61,61
+62,person_62,62
+63,person_63,63
+64,software_64,python
+65,person_65,65
+66,person_66,66
+67,person_67,67
+68,software_68,python
+69,person_69,69
+70,person_70,70
+71,person_71,71
+72,software_72,python
+73,person_73,73
+74,person_74,74
+75,person_75,75
+76,software_76,python
+77,person_77,77
+78,person_78,78
+79,person_79,79
+80,software_80,python
+81,person_81,81
+82,person_82,82
+83,person_83,83
+84,software_84,python
+85,person_85,85
+86,person_86,86
+87,person_87,87
+88,software_88,python
+89,person_89,89
+90,person_90,90
+91,person_91,91
+92,software_92,python
+93,person_93,93
+94,person_94,94
+95,person_95,95
+96,software_96,python
+97,person_97,97
+98,person_98,98
+99,person_99,99
+100,software_100,python
+101,person_101,1
+102,person_102,2
+103,person_103,3
+104,software_104,python
+105,person_105,5
+106,person_106,6
+107,person_107,7
+108,software_108,python
+109,person_109,9
+110,person_110,10
+111,person_111,11
+112,software_112,python
+113,person_113,13
+114,person_114,14
+115,person_115,15
+116,software_116,python
+117,person_117,17
+118,person_118,18
+119,person_119,19
+120,software_120,python
+121,person_121,21
+122,person_122,22
+123,person_123,23
+124,software_124,python
+125,person_125,25
+126,person_126,26
+127,person_127,27
+128,software_128,python
+129,person_129,29
+130,person_130,30
+131,person_131,31
+132,software_132,python
+133,person_133,33
+134,person_134,34
+135,person_135,35
+136,software_136,python
+137,person_137,37
+138,person_138,38
+139,person_139,39
+140,software_140,python
+141,person_141,41
+142,person_142,42
+143,person_143,43
+144,software_144,python
+145,person_145,45
+146,person_146,46
+147,person_147,47
+148,software_148,python
+149,person_149,49
+150,person_150,50
+151,person_151,51
+152,software_152,python
+153,person_153,53
+154,person_154,54
+155,person_155,55
+156,software_156,python
+157,person_157,57
+158,person_158,58
+159,person_159,59
+160,software_160,python
+161,person_161,61
+162,person_162,62
+163,person_163,63
+164,software_164,python
+165,person_165,65
+166,person_166,66
+167,person_167,67
+168,software_168,python
+169,person_169,69
+170,person_170,70
+171,person_171,71
+172,software_172,python
+173,person_173,73
+174,person_174,74
+175,person_175,75
+176,software_176,python
+177,person_177,77
+178,person_178,78
+179,person_179,79
+180,software_180,python
+181,person_181,81
+182,person_182,82
+183,person_183,83
+184,software_184,python
+185,person_185,85
+186,person_186,86
+187,person_187,87
+188,software_188,python
+189,person_189,89
+190,person_190,90
+191,person_191,91
+192,software_192,python
+193,person_193,93
+194,person_194,94
+195,person_195,95
+196,software_196,python
+197,person_197,97
+198,person_198,98
+199,person_199,99
+200,software_200,python
+201,person_201,1
+202,person_202,2
+203,person_203,3
+204,software_204,python
+205,person_205,5
+206,person_206,6
+207,person_207,7
+208,software_208,python
+209,person_209,9
+210,person_210,10
+211,person_211,11
+212,software_212,python
+213,person_213,13
+214,person_214,14
+215,person_215,15
+216,software_216,python
+217,person_217,17
+218,person_218,18
+219,person_219,19
+220,software_220,python
+221,person_221,21
+222,person_222,22
+223,person_223,23
+224,software_224,python
+225,person_225,25
+226,person_226,26
+227,person_227,27
+228,software_228,python
+229,person_229,29
+230,person_230,30
+231,person_231,31
+232,software_232,python
+233,person_233,33
+234,person_234,34
+235,person_235,35
+236,software_236,python
+237,person_237,37
+238,person_238,38
+239,person_239,39
+240,software_240,python
+241,person_241,41
+242,person_242,42
+243,person_243,43
+244,software_244,python
+245,person_245,45
+246,person_246,46
+247,person_247,47
+248,software_248,python
+249,person_249,49
+250,person_250,50
+251,person_251,51
+252,software_252,python
+253,person_253,53
+254,person_254,54
+255,person_255,55
+256,software_256,python
+257,person_257,57
+258,person_258,58
+259,person_259,59
+260,software_260,python
+261,person_261,61
+262,person_262,62
+263,person_263,63
+264,software_264,python
+265,person_265,65
+266,person_266,66
+267,person_267,67
+268,software_268,python
+269,person_269,69
+270,person_270,70
+271,person_271,71
+272,software_272,python
+273,person_273,73
+274,person_274,74
+275,person_275,75
+276,software_276,python
+277,person_277,77
+278,person_278,78
+279,person_279,79
+280,software_280,python
+281,person_281,81
+282,person_282,82
+283,person_283,83
+284,software_284,python
+285,person_285,85
+286,person_286,86
+287,person_287,87
+288,software_288,python
+289,person_289,89
+290,person_290,90
+291,person_291,91
+292,software_292,python
+293,person_293,93
+294,person_294,94
+295,person_295,95
+296,software_296,python
+297,person_297,97
+298,person_298,98
+299,person_299,99
+300,software_300,python
+301,person_301,1
+302,person_302,2
+303,person_303,3
+304,software_304,python
+305,person_305,5
+306,person_306,6
+307,person_307,7
+308,software_308,python
+309,person_309,9
+310,person_310,10
+311,person_311,11
+312,software_312,python
+313,person_313,13
+314,person_314,14
+315,person_315,15
+316,software_316,python
+317,person_317,17
+318,person_318,18
+319,person_319,19
+320,software_320,python
+321,person_321,21
+322,person_322,22
+323,person_323,23
+324,software_324,python
+325,person_325,25
+326,person_326,26
+327,person_327,27
+328,software_328,python
+329,person_329,29
+330,person_330,30
+331,person_331,31
+332,software_332,python
+333,person_333,33
+334,person_334,34
+335,person_335,35
+336,software_336,python
+337,person_337,37
+338,person_338,38
+339,person_339,39
+340,software_340,python
+341,person_341,41
+342,person_342,42
+343,person_343,43
+344,software_344,python
+345,person_345,45
+346,person_346,46
+347,person_347,47
+348,software_348,python
+349,person_349,49
+350,person_350,50
+351,person_351,51
+352,software_352,python
+353,person_353,53
+354,person_354,54
+355,person_355,55
+356,software_356,python
+357,person_357,57
+358,person_358,58
+359,person_359,59
+360,software_360,python
+361,person_361,61
+362,person_362,62
+363,person_363,63
+364,software_364,python
+365,person_365,65
+366,person_366,66
+367,person_367,67
+368,software_368,python
+369,person_369,69
+370,person_370,70
+371,person_371,71
+372,software_372,python
+373,person_373,73
+374,person_374,74
+375,person_375,75
+376,software_376,python
+377,person_377,77
+378,person_378,78
+379,person_379,79
+380,software_380,python
+381,person_381,81
+382,person_382,82
+383,person_383,83
+384,software_384,python
+385,person_385,85
+386,person_386,86
+387,person_387,87
+388,software_388,python
+389,person_389,89
+390,person_390,90
+391,person_391,91
+392,software_392,python
+393,person_393,93
+394,person_394,94
+395,person_395,95
+396,software_396,python
+397,person_397,97
+398,person_398,98
+399,person_399,99
+400,software_400,python
+401,person_401,1
+402,person_402,2
+403,person_403,3
+404,software_404,python
+405,person_405,5
+406,person_406,6
+407,person_407,7
+408,software_408,python
+409,person_409,9
+410,person_410,10
+411,person_411,11
+412,software_412,python
+413,person_413,13
+414,person_414,14
+415,person_415,15
+416,software_416,python
+417,person_417,17
+418,person_418,18
+419,person_419,19
+420,software_420,python
+421,person_421,21
+422,person_422,22
+423,person_423,23
+424,software_424,python
+425,person_425,25
+426,person_426,26
+427,person_427,27
+428,software_428,python
+429,person_429,29
+430,person_430,30
+431,person_431,31
+432,software_432,python
+433,person_433,33
+434,person_434,34
+435,person_435,35
+436,software_436,python
+437,person_437,37
+438,person_438,38
+439,person_439,39
+440,software_440,python
+441,person_441,41
+442,person_442,42
+443,person_443,43
+444,software_444,python
+445,person_445,45
+446,person_446,46
+447,person_447,47
+448,software_448,python
+449,person_449,49
+450,person_450,50
+451,person_451,51
+452,software_452,python
+453,person_453,53
+454,person_454,54
+455,person_455,55
+456,software_456,python
+457,person_457,57
+458,person_458,58
+459,person_459,59
+460,software_460,python
+461,person_461,61
+462,person_462,62
+463,person_463,63
+464,software_464,python
+465,person_465,65
+466,person_466,66
+467,person_467,67
+468,software_468,python
+469,person_469,69
+470,person_470,70
+471,person_471,71
+472,software_472,python
+473,person_473,73
+474,person_474,74
+475,person_475,75
+476,software_476,python
+477,person_477,77
+478,person_478,78
+479,person_479,79
+480,software_480,python
+481,person_481,81
+482,person_482,82
+483,person_483,83
+484,software_484,python
+485,person_485,85
+486,person_486,86
+487,person_487,87
+488,software_488,python
+489,person_489,89
+490,person_490,90
+491,person_491,91
+492,software_492,python
+493,person_493,93
+494,person_494,94
+495,person_495,95
+496,software_496,python
+497,person_497,97
+498,person_498,98
+499,person_499,99
+500,software_500,python
+501,person_501,1
+502,person_502,2
+503,person_503,3
+504,software_504,python
+505,person_505,5
+506,person_506,6
+507,person_507,7
+508,software_508,python
+509,person_509,9
+510,person_510,10
+511,person_511,11
+512,software_512,python
+513,person_513,13
+514,person_514,14
+515,person_515,15
+516,software_516,python
+517,person_517,17
+518,person_518,18
+519,person_519,19
+520,software_520,python
+521,person_521,21
+522,person_522,22
+523,person_523,23
+524,software_524,python
+525,person_525,25
+526,person_526,26
+527,person_527,27
+528,software_528,python
+529,person_529,29
+530,person_530,30
+531,person_531,31
+532,software_532,python
+533,person_533,33
+534,person_534,34
+535,person_535,35
+536,software_536,python
+537,person_537,37
+538,person_538,38
+539,person_539,39
+540,software_540,python
+541,person_541,41
+542,person_542,42
+543,person_543,43
+544,software_544,python
+545,person_545,45
+546,person_546,46
+547,person_547,47
+548,software_548,python
+549,person_549,49
+550,person_550,50
+551,person_551,51
+552,software_552,python
+553,person_553,53
+554,person_554,54
+555,person_555,55
+556,software_556,python
+557,person_557,57
+558,person_558,58
+559,person_559,59
+560,software_560,python
+561,person_561,61
+562,person_562,62
+563,person_563,63
+564,software_564,python
+565,person_565,65
+566,person_566,66
+567,person_567,67
+568,software_568,python
+569,person_569,69
+570,person_570,70
+571,person_571,71
+572,software_572,python
+573,person_573,73
+574,person_574,74
+575,person_575,75
+576,software_576,python
+577,person_577,77
+578,person_578,78
+579,person_579,79
+580,software_580,python
+581,person_581,81
+582,person_582,82
+583,person_583,83
+584,software_584,python
+585,person_585,85
+586,person_586,86
+587,person_587,87
+588,software_588,python
+589,person_589,89
+590,person_590,90
+591,person_591,91
+592,software_592,python
+593,person_593,93
+594,person_594,94
+595,person_595,95
+596,software_596,python
+597,person_597,97
+598,person_598,98
+599,person_599,99
+600,software_600,python
+601,person_601,1
+602,person_602,2
+603,person_603,3
+604,software_604,python
+605,person_605,5
+606,person_606,6
+607,person_607,7
+608,software_608,python
+609,person_609,9
+610,person_610,10
+611,person_611,11
+612,software_612,python
+613,person_613,13
+614,person_614,14
+615,person_615,15
+616,software_616,python
+617,person_617,17
+618,person_618,18
+619,person_619,19
+620,software_620,python
+621,person_621,21
+622,person_622,22
+623,person_623,23
+624,software_624,python
+625,person_625,25
+626,person_626,26
+627,person_627,27
+628,software_628,python
+629,person_629,29
+630,person_630,30
+631,person_631,31
+632,software_632,python
+633,person_633,33
+634,person_634,34
+635,person_635,35
+636,software_636,python
+637,person_637,37
+638,person_638,38
+639,person_639,39
+640,software_640,python
+641,person_641,41
+642,person_642,42
+643,person_643,43
+644,software_644,python
+645,person_645,45
+646,person_646,46
+647,person_647,47
+648,software_648,python
+649,person_649,49
+650,person_650,50
+651,person_651,51
+652,software_652,python
+653,person_653,53
+654,person_654,54
+655,person_655,55
+656,software_656,python
+657,person_657,57
+658,person_658,58
+659,person_659,59
+660,software_660,python
+661,person_661,61
+662,person_662,62
+663,person_663,63
+664,software_664,python
+665,person_665,65
+666,person_666,66
+667,person_667,67
+668,software_668,python
+669,person_669,69
+670,person_670,70
+671,person_671,71
+672,software_672,python
+673,person_673,73
+674,person_674,74
+675,person_675,75
+676,software_676,python
+677,person_677,77
+678,person_678,78
+679,person_679,79
+680,software_680,python
+681,person_681,81
+682,person_682,82
+683,person_683,83
+684,software_684,python
+685,person_685,85
+686,person_686,86
+687,person_687,87
+688,software_688,python
+689,person_689,89
+690,person_690,90
+691,person_691,91
+692,software_692,python
+693,person_693,93
+694,person_694,94
+695,person_695,95
+696,software_696,python
+697,person_697,97
+698,person_698,98
+699,person_699,99
+700,software_700,python
+701,person_701,1
+702,person_702,2
+703,person_703,3
+704,software_704,python
+705,person_705,5
+706,person_706,6
+707,person_707,7
+708,software_708,python
+709,person_709,9
+710,person_710,10
+711,person_711,11
+712,software_712,python
+713,person_713,13
+714,person_714,14
+715,person_715,15
+716,software_716,python
+717,person_717,17
+718,person_718,18
+719,person_719,19
+720,software_720,python
+721,person_721,21
+722,person_722,22
+723,person_723,23
+724,software_724,python
+725,person_725,25
+726,person_726,26
+727,person_727,27
+728,software_728,python
+729,person_729,29
+730,person_730,30
+731,person_731,31
+732,software_732,python
+733,person_733,33
+734,person_734,34
+735,person_735,35
+736,software_736,python
+737,person_737,37
+738,person_738,38
+739,person_739,39
+740,software_740,python
+741,person_741,41
+742,person_742,42
+743,person_743,43
+744,software_744,python
+745,person_745,45
+746,person_746,46
+747,person_747,47
+748,software_748,python
+749,person_749,49
+750,person_750,50
+751,person_751,51
+752,software_752,python
+753,person_753,53
+754,person_754,54
+755,person_755,55
+756,software_756,python
+757,person_757,57
+758,person_758,58
+759,person_759,59
+760,software_760,python
+761,person_761,61
+762,person_762,62
+763,person_763,63
+764,software_764,python
+765,person_765,65
+766,person_766,66
+767,person_767,67
+768,software_768,python
+769,person_769,69
+770,person_770,70
+771,person_771,71
+772,software_772,python
+773,person_773,73
+774,person_774,74
+775,person_775,75
+776,software_776,python
+777,person_777,77
+778,person_778,78
+779,person_779,79
+780,software_780,python
+781,person_781,81
+782,person_782,82
+783,person_783,83
+784,software_784,python
+785,person_785,85
+786,person_786,86
+787,person_787,87
+788,software_788,python
+789,person_789,89
+790,person_790,90
+791,person_791,91
+792,software_792,python
+793,person_793,93
+794,person_794,94
+795,person_795,95
+796,software_796,python
+797,person_797,97
+798,person_798,98
+799,person_799,99
+800,software_800,python
+801,person_801,1
+802,person_802,2
+803,person_803,3
+804,software_804,python
+805,person_805,5
+806,person_806,6
+807,person_807,7
+808,software_808,python
+809,person_809,9
+810,person_810,10
+811,person_811,11
+812,software_812,python
+813,person_813,13
+814,person_814,14
+815,person_815,15
+816,software_816,python
+817,person_817,17
+818,person_818,18
+819,person_819,19
+820,software_820,python
+821,person_821,21
+822,person_822,22
+823,person_823,23
+824,software_824,python
+825,person_825,25
+826,person_826,26
+827,person_827,27
+828,software_828,python
+829,person_829,29
+830,person_830,30
+831,person_831,31
+832,software_832,python
+833,person_833,33
+834,person_834,34
+835,person_835,35
+836,software_836,python
+837,person_837,37
+838,person_838,38
+839,person_839,39
+840,software_840,python
+841,person_841,41
+842,person_842,42
+843,person_843,43
+844,software_844,python
+845,person_845,45
+846,person_846,46
+847,person_847,47
+848,software_848,python
+849,person_849,49
+850,person_850,50
+851,person_851,51
+852,software_852,python
+853,person_853,53
+854,person_854,54
+855,person_855,55
+856,software_856,python
+857,person_857,57
+858,person_858,58
+859,person_859,59
+860,software_860,python
+861,person_861,61
+862,person_862,62
+863,person_863,63
+864,software_864,python
+865,person_865,65
+866,person_866,66
+867,person_867,67
+868,software_868,python
+869,person_869,69
+870,person_870,70
+871,person_871,71
+872,software_872,python
+873,person_873,73
+874,person_874,74
+875,person_875,75
+876,software_876,python
+877,person_877,77
+878,person_878,78
+879,person_879,79
+880,software_880,python
+881,person_881,81
+882,person_882,82
+883,person_883,83
+884,software_884,python
+885,person_885,85
+886,person_886,86
+887,person_887,87
+888,software_888,python
+889,person_889,89
+890,person_890,90
+891,person_891,91
+892,software_892,python
+893,person_893,93
+894,person_894,94
+895,person_895,95
+896,software_896,python
+897,person_897,97
+898,person_898,98
+899,person_899,99
+900,software_900,python
+901,person_901,1
+902,person_902,2
+903,person_903,3
+904,software_904,python
+905,person_905,5
+906,person_906,6
+907,person_907,7
+908,software_908,python
+909,person_909,9
+910,person_910,10
+911,person_911,11
+912,software_912,python
+913,person_913,13
+914,person_914,14
+915,person_915,15
+916,software_916,python
+917,person_917,17
+918,person_918,18
+919,person_919,19
+920,software_920,python
+921,person_921,21
+922,person_922,22
+923,person_923,23
+924,software_924,python
+925,person_925,25
+926,person_926,26
+927,person_927,27
+928,software_928,python
+929,person_929,29
+930,person_930,30
+931,person_931,31
+932,software_932,python
+933,person_933,33
+934,person_934,34
+935,person_935,35
+936,software_936,python
+937,person_937,37
+938,person_938,38
+939,person_939,39
+940,software_940,python
+941,person_941,41
+942,person_942,42
+943,person_943,43
+944,software_944,python
+945,person_945,45
+946,person_946,46
+947,person_947,47
+948,software_948,python
+949,person_949,49
+950,person_950,50
+951,person_951,51
+952,software_952,python
+953,person_953,53
+954,person_954,54
+955,person_955,55
+956,software_956,python
+957,person_957,57
+958,person_958,58
+959,person_959,59
+960,software_960,python
+961,person_961,61
+962,person_962,62
+963,person_963,63
+964,software_964,python
+965,person_965,65
+966,person_966,66
+967,person_967,67
+968,software_968,python
+969,person_969,69
+970,person_970,70
+971,person_971,71
+972,software_972,python
+973,person_973,73
+974,person_974,74
+975,person_975,75
+976,software_976,python
+977,person_977,77
+978,person_978,78
+979,person_979,79
+980,software_980,python
+981,person_981,81
+982,person_982,82
+983,person_983,83
+984,software_984,python
+985,person_985,85
+986,person_986,86
+987,person_987,87
+988,software_988,python
+989,person_989,89
+990,person_990,90
+991,person_991,91
+992,software_992,python
+993,person_993,93
+994,person_994,94
+995,person_995,95
+996,software_996,python
+997,person_997,97
+998,person_998,98
+999,person_999,99
+1000,software_1000,python
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/medium_graph_edge.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/medium_graph_edge.txt
new file mode 100644
index 000000000..549b19e1f
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/medium_graph_edge.txt
@@ -0,0 +1,300 @@
+1,2
+1,91
+2,3
+2,81
+2,90
+3,4
+3,17
+3,67
+3,75
+3,94
+4,5
+4,84
+5,6
+5,25
+5,28
+5,69
+5,86
+6,7
+6,18
+6,34
+6,42
+6,51
+6,59
+7,8
+7,43
+7,94
+8,9
+8,71
+9,10
+9,21
+9,30
+10,11
+10,43
+10,59
+10,85
+10,94
+11,12
+11,16
+11,77
+12,13
+12,61
+12,84
+12,91
+13,14
+13,58
+14,15
+14,49
+15,16
+15,23
+15,38
+15,55
+16,17
+16,97
+17,18
+17,50
+17,99
+18,19
+18,25
+19,20
+20,18
+20,21
+20,58
+21,22
+21,24
+22,23
+22,31
+22,64
+22,73
+22,82
+23,24
+23,52
+24,25
+24,38
+24,50
+25,16
+25,26
+25,34
+25,51
+25,75
+26,17
+26,27
+26,65
+27,28
+27,38
+27,74
+28,16
+28,29
+28,75
+29,12
+29,30
+30,31
+31,32
+31,94
+32,33
+32,81
+33,34
+33,57
+34,9
+34,35
+35,16
+35,36
+36,17
+36,37
+36,47
+36,50
+36,89
+37,38
+37,49
+37,99
+38,39
+38,87
+38,93
+39,40
+39,58
+40,41
+40,83
+41,10
+41,42
+41,70
+42,30
+42,43
+42,58
+42,84
+42,92
+43,44
+43,87
+44,45
+44,64
+45,5
+45,11
+45,31
+45,46
+46,18
+46,47
+46,58
+47,48
+47,73
+48,49
+48,93
+49,18
+49,31
+49,36
+49,50
+49,79
+50,27
+50,31
+50,51
+50,68
+51,14
+51,44
+51,52
+51,88
+52,53
+53,7
+53,25
+53,54
+53,76
+53,81
+54,55
+55,16
+55,24
+55,42
+55,56
+56,51
+56,57
+57,58
+57,73
+58,21
+58,59
+59,60
+60,3
+60,61
+61,24
+61,47
+61,51
+61,62
+62,63
+62,76
+63,64
+64,65
+64,85
+64,90
+65,2
+65,5
+65,44
+65,66
+66,5
+66,41
+66,52
+66,61
+66,67
+67,50
+67,58
+67,68
+68,69
+68,70
+68,73
+68,95
+69,41
+69,70
+69,76
+70,2
+70,6
+70,71
+70,72
+71,19
+71,26
+71,72
+71,92
+72,12
+72,29
+72,73
+72,74
+72,75
+73,74
+74,39
+74,75
+75,59
+75,76
+76,14
+76,32
+76,56
+76,77
+76,100
+77,16
+77,25
+77,47
+77,78
+78,23
+78,64
+78,79
+79,60
+79,80
+79,88
+80,17
+80,39
+80,81
+81,25
+81,82
+82,71
+82,83
+83,8
+83,79
+83,84
+84,81
+84,85
+85,2
+85,13
+85,86
+85,95
+86,61
+86,83
+86,87
+86,91
+87,67
+87,88
+88,89
+89,3
+89,6
+89,20
+89,37
+89,90
+89,92
+90,7
+90,12
+90,29
+90,48
+90,75
+90,91
+91,18
+91,43
+91,49
+91,55
+91,70
+91,92
+91,100
+92,93
+93,36
+93,54
+93,87
+93,88
+93,94
+94,37
+94,95
+95,9
+95,11
+95,26
+95,96
+96,42
+96,97
+97,98
+98,15
+98,99
+99,36
+99,96
+99,100
+100,1
+100,11
+100,27
+100,69
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/medium_graph_vertex.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/medium_graph_vertex.txt
new file mode 100644
index 000000000..6db235634
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/data/medium_graph_vertex.txt
@@ -0,0 +1,100 @@
+1,person_1,1
+2,person_2,2
+3,software_3,java
+4,person_4,4
+5,person_5,5
+6,software_6,java
+7,person_7,7
+8,person_8,8
+9,software_9,java
+10,person_10,10
+11,person_11,11
+12,software_12,java
+13,person_13,13
+14,person_14,14
+15,software_15,java
+16,person_16,16
+17,person_17,17
+18,software_18,java
+19,person_19,19
+20,person_20,20
+21,software_21,java
+22,person_22,22
+23,person_23,23
+24,software_24,java
+25,person_25,25
+26,person_26,26
+27,software_27,java
+28,person_28,28
+29,person_29,29
+30,software_30,java
+31,person_31,31
+32,person_32,32
+33,software_33,java
+34,person_34,34
+35,person_35,35
+36,software_36,java
+37,person_37,37
+38,person_38,38
+39,software_39,java
+40,person_40,40
+41,person_41,41
+42,software_42,java
+43,person_43,43
+44,person_44,44
+45,software_45,java
+46,person_46,46
+47,person_47,47
+48,software_48,java
+49,person_49,49
+50,person_50,0
+51,software_51,java
+52,person_52,2
+53,person_53,3
+54,software_54,java
+55,person_55,5
+56,person_56,6
+57,software_57,java
+58,person_58,8
+59,person_59,9
+60,software_60,java
+61,person_61,11
+62,person_62,12
+63,software_63,java
+64,person_64,14
+65,person_65,15
+66,software_66,java
+67,person_67,17
+68,person_68,18
+69,software_69,java
+70,person_70,20
+71,person_71,21
+72,software_72,java
+73,person_73,23
+74,person_74,24
+75,software_75,java
+76,person_76,26
+77,person_77,27
+78,software_78,java
+79,person_79,29
+80,person_80,30
+81,software_81,java
+82,person_82,32
+83,person_83,33
+84,software_84,java
+85,person_85,35
+86,person_86,36
+87,software_87,java
+88,person_88,38
+89,person_89,39
+90,software_90,java
+91,person_91,41
+92,person_92,42
+93,software_93,java
+94,person_94,44
+95,person_95,45
+96,software_96,java
+97,person_97,47
+98,person_98,48
+99,software_99,java
+100,person_100,0
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient.txt
new file mode 100644
index 000000000..a8dfaaae5
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient.txt
@@ -0,0 +1,6 @@
+1,0.3333333333333333
+2,0.0
+3,0.3333333333333333
+4,0.3333333333333333
+5,0.0
+6,0.0
\ No newline at end of file
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_large.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_large.txt
new file mode 100644
index 000000000..c836c2fbf
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_large.txt
@@ -0,0 +1,1000 @@
+1,0.6
+2,0.9
+3,0.8
+4,0.7142857142857143
+5,0.6428571428571429
+6,0.6428571428571429
+7,0.6428571428571429
+8,0.6428571428571429
+9,0.6428571428571429
+10,0.6428571428571429
+11,0.6428571428571429
+12,0.6428571428571429
+13,0.6428571428571429
+14,0.6428571428571429
+15,0.6428571428571429
+16,0.6428571428571429
+17,0.6428571428571429
+18,0.6428571428571429
+19,0.6428571428571429
+20,0.6428571428571429
+21,0.6428571428571429
+22,0.6428571428571429
+23,0.6428571428571429
+24,0.6428571428571429
+25,0.6428571428571429
+26,0.6428571428571429
+27,0.6428571428571429
+28,0.6428571428571429
+29,0.6428571428571429
+30,0.6428571428571429
+31,0.6428571428571429
+32,0.6428571428571429
+33,0.6428571428571429
+34,0.6428571428571429
+35,0.6428571428571429
+36,0.6428571428571429
+37,0.6428571428571429
+38,0.6428571428571429
+39,0.6428571428571429
+40,0.6428571428571429
+41,0.6428571428571429
+42,0.6428571428571429
+43,0.6428571428571429
+44,0.6428571428571429
+45,0.6428571428571429
+46,0.6428571428571429
+47,0.7142857142857143
+48,0.8
+49,0.9
+50,0.6
+51,0.6
+52,0.9
+53,0.8
+54,0.7142857142857143
+55,0.6428571428571429
+56,0.6428571428571429
+57,0.6428571428571429
+58,0.6428571428571429
+59,0.6428571428571429
+60,0.6428571428571429
+61,0.6428571428571429
+62,0.6428571428571429
+63,0.6428571428571429
+64,0.6428571428571429
+65,0.6428571428571429
+66,0.6428571428571429
+67,0.6428571428571429
+68,0.6428571428571429
+69,0.6428571428571429
+70,0.6428571428571429
+71,0.6428571428571429
+72,0.6428571428571429
+73,0.6428571428571429
+74,0.6428571428571429
+75,0.6428571428571429
+76,0.6428571428571429
+77,0.6428571428571429
+78,0.6428571428571429
+79,0.6428571428571429
+80,0.6428571428571429
+81,0.6428571428571429
+82,0.6428571428571429
+83,0.6428571428571429
+84,0.6428571428571429
+85,0.6428571428571429
+86,0.6428571428571429
+87,0.6428571428571429
+88,0.6428571428571429
+89,0.6428571428571429
+90,0.6428571428571429
+91,0.6428571428571429
+92,0.6428571428571429
+93,0.6428571428571429
+94,0.6428571428571429
+95,0.6428571428571429
+96,0.6428571428571429
+97,0.7142857142857143
+98,0.8
+99,0.9
+100,0.6
+101,0.6
+102,0.9
+103,0.8
+104,0.7142857142857143
+105,0.6428571428571429
+106,0.6428571428571429
+107,0.6428571428571429
+108,0.6428571428571429
+109,0.6428571428571429
+110,0.6428571428571429
+111,0.6428571428571429
+112,0.6428571428571429
+113,0.6428571428571429
+114,0.6428571428571429
+115,0.6428571428571429
+116,0.6428571428571429
+117,0.6428571428571429
+118,0.6428571428571429
+119,0.6428571428571429
+120,0.6428571428571429
+121,0.6428571428571429
+122,0.6428571428571429
+123,0.6428571428571429
+124,0.6428571428571429
+125,0.6428571428571429
+126,0.6428571428571429
+127,0.6428571428571429
+128,0.6428571428571429
+129,0.6428571428571429
+130,0.6428571428571429
+131,0.6428571428571429
+132,0.6428571428571429
+133,0.6428571428571429
+134,0.6428571428571429
+135,0.6428571428571429
+136,0.6428571428571429
+137,0.6428571428571429
+138,0.6428571428571429
+139,0.6428571428571429
+140,0.6428571428571429
+141,0.6428571428571429
+142,0.6428571428571429
+143,0.6428571428571429
+144,0.6428571428571429
+145,0.6428571428571429
+146,0.6428571428571429
+147,0.7142857142857143
+148,0.8
+149,0.9
+150,0.6
+151,0.6
+152,0.9
+153,0.8
+154,0.7142857142857143
+155,0.6428571428571429
+156,0.6428571428571429
+157,0.6428571428571429
+158,0.6428571428571429
+159,0.6428571428571429
+160,0.6428571428571429
+161,0.6428571428571429
+162,0.6428571428571429
+163,0.6428571428571429
+164,0.6428571428571429
+165,0.6428571428571429
+166,0.6428571428571429
+167,0.6428571428571429
+168,0.6428571428571429
+169,0.6428571428571429
+170,0.6428571428571429
+171,0.6428571428571429
+172,0.6428571428571429
+173,0.6428571428571429
+174,0.6428571428571429
+175,0.6428571428571429
+176,0.6428571428571429
+177,0.6428571428571429
+178,0.6428571428571429
+179,0.6428571428571429
+180,0.6428571428571429
+181,0.6428571428571429
+182,0.6428571428571429
+183,0.6428571428571429
+184,0.6428571428571429
+185,0.6428571428571429
+186,0.6428571428571429
+187,0.6428571428571429
+188,0.6428571428571429
+189,0.6428571428571429
+190,0.6428571428571429
+191,0.6428571428571429
+192,0.6428571428571429
+193,0.6428571428571429
+194,0.6428571428571429
+195,0.6428571428571429
+196,0.6428571428571429
+197,0.7142857142857143
+198,0.8
+199,0.9
+200,0.6
+201,0.6
+202,0.9
+203,0.8
+204,0.7142857142857143
+205,0.6428571428571429
+206,0.6428571428571429
+207,0.6428571428571429
+208,0.6428571428571429
+209,0.6428571428571429
+210,0.6428571428571429
+211,0.6428571428571429
+212,0.6428571428571429
+213,0.6428571428571429
+214,0.6428571428571429
+215,0.6428571428571429
+216,0.6428571428571429
+217,0.6428571428571429
+218,0.6428571428571429
+219,0.6428571428571429
+220,0.6428571428571429
+221,0.6428571428571429
+222,0.6428571428571429
+223,0.6428571428571429
+224,0.6428571428571429
+225,0.6428571428571429
+226,0.6428571428571429
+227,0.6428571428571429
+228,0.6428571428571429
+229,0.6428571428571429
+230,0.6428571428571429
+231,0.6428571428571429
+232,0.6428571428571429
+233,0.6428571428571429
+234,0.6428571428571429
+235,0.6428571428571429
+236,0.6428571428571429
+237,0.6428571428571429
+238,0.6428571428571429
+239,0.6428571428571429
+240,0.6428571428571429
+241,0.6428571428571429
+242,0.6428571428571429
+243,0.6428571428571429
+244,0.6428571428571429
+245,0.6428571428571429
+246,0.6428571428571429
+247,0.7142857142857143
+248,0.8
+249,0.9
+250,0.6
+251,0.6
+252,0.9
+253,0.8
+254,0.7142857142857143
+255,0.6428571428571429
+256,0.6428571428571429
+257,0.6428571428571429
+258,0.6428571428571429
+259,0.6428571428571429
+260,0.6428571428571429
+261,0.6428571428571429
+262,0.6428571428571429
+263,0.6428571428571429
+264,0.6428571428571429
+265,0.6428571428571429
+266,0.6428571428571429
+267,0.6428571428571429
+268,0.6428571428571429
+269,0.6428571428571429
+270,0.6428571428571429
+271,0.6428571428571429
+272,0.6428571428571429
+273,0.6428571428571429
+274,0.6428571428571429
+275,0.6428571428571429
+276,0.6428571428571429
+277,0.6428571428571429
+278,0.6428571428571429
+279,0.6428571428571429
+280,0.6428571428571429
+281,0.6428571428571429
+282,0.6428571428571429
+283,0.6428571428571429
+284,0.6428571428571429
+285,0.6428571428571429
+286,0.6428571428571429
+287,0.6428571428571429
+288,0.6428571428571429
+289,0.6428571428571429
+290,0.6428571428571429
+291,0.6428571428571429
+292,0.6428571428571429
+293,0.6428571428571429
+294,0.6428571428571429
+295,0.6428571428571429
+296,0.6428571428571429
+297,0.7142857142857143
+298,0.8
+299,0.9
+300,0.6
+301,0.6
+302,0.9
+303,0.8
+304,0.7142857142857143
+305,0.6428571428571429
+306,0.6428571428571429
+307,0.6428571428571429
+308,0.6428571428571429
+309,0.6428571428571429
+310,0.6428571428571429
+311,0.6428571428571429
+312,0.6428571428571429
+313,0.6428571428571429
+314,0.6428571428571429
+315,0.6428571428571429
+316,0.6428571428571429
+317,0.6428571428571429
+318,0.6428571428571429
+319,0.6428571428571429
+320,0.6428571428571429
+321,0.6428571428571429
+322,0.6428571428571429
+323,0.6428571428571429
+324,0.6428571428571429
+325,0.6428571428571429
+326,0.6428571428571429
+327,0.6428571428571429
+328,0.6428571428571429
+329,0.6428571428571429
+330,0.6428571428571429
+331,0.6428571428571429
+332,0.6428571428571429
+333,0.6428571428571429
+334,0.6428571428571429
+335,0.6428571428571429
+336,0.6428571428571429
+337,0.6428571428571429
+338,0.6428571428571429
+339,0.6428571428571429
+340,0.6428571428571429
+341,0.6428571428571429
+342,0.6428571428571429
+343,0.6428571428571429
+344,0.6428571428571429
+345,0.6428571428571429
+346,0.6428571428571429
+347,0.7142857142857143
+348,0.8
+349,0.9
+350,0.6
+351,0.6
+352,0.9
+353,0.8
+354,0.7142857142857143
+355,0.6428571428571429
+356,0.6428571428571429
+357,0.6428571428571429
+358,0.6428571428571429
+359,0.6428571428571429
+360,0.6428571428571429
+361,0.6428571428571429
+362,0.6428571428571429
+363,0.6428571428571429
+364,0.6428571428571429
+365,0.6428571428571429
+366,0.6428571428571429
+367,0.6428571428571429
+368,0.6428571428571429
+369,0.6428571428571429
+370,0.6428571428571429
+371,0.6428571428571429
+372,0.6428571428571429
+373,0.6428571428571429
+374,0.6428571428571429
+375,0.6428571428571429
+376,0.6428571428571429
+377,0.6428571428571429
+378,0.6428571428571429
+379,0.6428571428571429
+380,0.6428571428571429
+381,0.6428571428571429
+382,0.6428571428571429
+383,0.6428571428571429
+384,0.6428571428571429
+385,0.6428571428571429
+386,0.6428571428571429
+387,0.6428571428571429
+388,0.6428571428571429
+389,0.6428571428571429
+390,0.6428571428571429
+391,0.6428571428571429
+392,0.6428571428571429
+393,0.6428571428571429
+394,0.6428571428571429
+395,0.6428571428571429
+396,0.6428571428571429
+397,0.7142857142857143
+398,0.8
+399,0.9
+400,0.6
+401,0.6
+402,0.9
+403,0.8
+404,0.7142857142857143
+405,0.6428571428571429
+406,0.6428571428571429
+407,0.6428571428571429
+408,0.6428571428571429
+409,0.6428571428571429
+410,0.6428571428571429
+411,0.6428571428571429
+412,0.6428571428571429
+413,0.6428571428571429
+414,0.6428571428571429
+415,0.6428571428571429
+416,0.6428571428571429
+417,0.6428571428571429
+418,0.6428571428571429
+419,0.6428571428571429
+420,0.6428571428571429
+421,0.6428571428571429
+422,0.6428571428571429
+423,0.6428571428571429
+424,0.6428571428571429
+425,0.6428571428571429
+426,0.6428571428571429
+427,0.6428571428571429
+428,0.6428571428571429
+429,0.6428571428571429
+430,0.6428571428571429
+431,0.6428571428571429
+432,0.6428571428571429
+433,0.6428571428571429
+434,0.6428571428571429
+435,0.6428571428571429
+436,0.6428571428571429
+437,0.6428571428571429
+438,0.6428571428571429
+439,0.6428571428571429
+440,0.6428571428571429
+441,0.6428571428571429
+442,0.6428571428571429
+443,0.6428571428571429
+444,0.6428571428571429
+445,0.6428571428571429
+446,0.6428571428571429
+447,0.7142857142857143
+448,0.8
+449,0.9
+450,0.6
+451,0.6
+452,0.9
+453,0.8
+454,0.7142857142857143
+455,0.6428571428571429
+456,0.6428571428571429
+457,0.6428571428571429
+458,0.6428571428571429
+459,0.6428571428571429
+460,0.6428571428571429
+461,0.6428571428571429
+462,0.6428571428571429
+463,0.6428571428571429
+464,0.6428571428571429
+465,0.6428571428571429
+466,0.6428571428571429
+467,0.6428571428571429
+468,0.6428571428571429
+469,0.6428571428571429
+470,0.6428571428571429
+471,0.6428571428571429
+472,0.6428571428571429
+473,0.6428571428571429
+474,0.6428571428571429
+475,0.6428571428571429
+476,0.6428571428571429
+477,0.6428571428571429
+478,0.6428571428571429
+479,0.6428571428571429
+480,0.6428571428571429
+481,0.6428571428571429
+482,0.6428571428571429
+483,0.6428571428571429
+484,0.6428571428571429
+485,0.6428571428571429
+486,0.6428571428571429
+487,0.6428571428571429
+488,0.6428571428571429
+489,0.6428571428571429
+490,0.6428571428571429
+491,0.6428571428571429
+492,0.6428571428571429
+493,0.6428571428571429
+494,0.6428571428571429
+495,0.6428571428571429
+496,0.6428571428571429
+497,0.7142857142857143
+498,0.8
+499,0.9
+500,0.6
+501,0.6
+502,0.9
+503,0.8
+504,0.7142857142857143
+505,0.6428571428571429
+506,0.6428571428571429
+507,0.6428571428571429
+508,0.6428571428571429
+509,0.6428571428571429
+510,0.6428571428571429
+511,0.6428571428571429
+512,0.6428571428571429
+513,0.6428571428571429
+514,0.6428571428571429
+515,0.6428571428571429
+516,0.6428571428571429
+517,0.6428571428571429
+518,0.6428571428571429
+519,0.6428571428571429
+520,0.6428571428571429
+521,0.6428571428571429
+522,0.6428571428571429
+523,0.6428571428571429
+524,0.6428571428571429
+525,0.6428571428571429
+526,0.6428571428571429
+527,0.6428571428571429
+528,0.6428571428571429
+529,0.6428571428571429
+530,0.6428571428571429
+531,0.6428571428571429
+532,0.6428571428571429
+533,0.6428571428571429
+534,0.6428571428571429
+535,0.6428571428571429
+536,0.6428571428571429
+537,0.6428571428571429
+538,0.6428571428571429
+539,0.6428571428571429
+540,0.6428571428571429
+541,0.6428571428571429
+542,0.6428571428571429
+543,0.6428571428571429
+544,0.6428571428571429
+545,0.6428571428571429
+546,0.6428571428571429
+547,0.7142857142857143
+548,0.8
+549,0.9
+550,0.6
+551,0.6
+552,0.9
+553,0.8
+554,0.7142857142857143
+555,0.6428571428571429
+556,0.6428571428571429
+557,0.6428571428571429
+558,0.6428571428571429
+559,0.6428571428571429
+560,0.6428571428571429
+561,0.6428571428571429
+562,0.6428571428571429
+563,0.6428571428571429
+564,0.6428571428571429
+565,0.6428571428571429
+566,0.6428571428571429
+567,0.6428571428571429
+568,0.6428571428571429
+569,0.6428571428571429
+570,0.6428571428571429
+571,0.6428571428571429
+572,0.6428571428571429
+573,0.6428571428571429
+574,0.6428571428571429
+575,0.6428571428571429
+576,0.6428571428571429
+577,0.6428571428571429
+578,0.6428571428571429
+579,0.6428571428571429
+580,0.6428571428571429
+581,0.6428571428571429
+582,0.6428571428571429
+583,0.6428571428571429
+584,0.6428571428571429
+585,0.6428571428571429
+586,0.6428571428571429
+587,0.6428571428571429
+588,0.6428571428571429
+589,0.6428571428571429
+590,0.6428571428571429
+591,0.6428571428571429
+592,0.6428571428571429
+593,0.6428571428571429
+594,0.6428571428571429
+595,0.6428571428571429
+596,0.6428571428571429
+597,0.7142857142857143
+598,0.8
+599,0.9
+600,0.6
+601,0.6
+602,0.9
+603,0.8
+604,0.7142857142857143
+605,0.6428571428571429
+606,0.6428571428571429
+607,0.6428571428571429
+608,0.6428571428571429
+609,0.6428571428571429
+610,0.6428571428571429
+611,0.6428571428571429
+612,0.6428571428571429
+613,0.6428571428571429
+614,0.6428571428571429
+615,0.6428571428571429
+616,0.6428571428571429
+617,0.6428571428571429
+618,0.6428571428571429
+619,0.6428571428571429
+620,0.6428571428571429
+621,0.6428571428571429
+622,0.6428571428571429
+623,0.6428571428571429
+624,0.6428571428571429
+625,0.6428571428571429
+626,0.6428571428571429
+627,0.6428571428571429
+628,0.6428571428571429
+629,0.6428571428571429
+630,0.6428571428571429
+631,0.6428571428571429
+632,0.6428571428571429
+633,0.6428571428571429
+634,0.6428571428571429
+635,0.6428571428571429
+636,0.6428571428571429
+637,0.6428571428571429
+638,0.6428571428571429
+639,0.6428571428571429
+640,0.6428571428571429
+641,0.6428571428571429
+642,0.6428571428571429
+643,0.6428571428571429
+644,0.6428571428571429
+645,0.6428571428571429
+646,0.6428571428571429
+647,0.7142857142857143
+648,0.8
+649,0.9
+650,0.6
+651,0.6
+652,0.9
+653,0.8
+654,0.7142857142857143
+655,0.6428571428571429
+656,0.6428571428571429
+657,0.6428571428571429
+658,0.6428571428571429
+659,0.6428571428571429
+660,0.6428571428571429
+661,0.6428571428571429
+662,0.6428571428571429
+663,0.6428571428571429
+664,0.6428571428571429
+665,0.6428571428571429
+666,0.6428571428571429
+667,0.6428571428571429
+668,0.6428571428571429
+669,0.6428571428571429
+670,0.6428571428571429
+671,0.6428571428571429
+672,0.6428571428571429
+673,0.6428571428571429
+674,0.6428571428571429
+675,0.6428571428571429
+676,0.6428571428571429
+677,0.6428571428571429
+678,0.6428571428571429
+679,0.6428571428571429
+680,0.6428571428571429
+681,0.6428571428571429
+682,0.6428571428571429
+683,0.6428571428571429
+684,0.6428571428571429
+685,0.6428571428571429
+686,0.6428571428571429
+687,0.6428571428571429
+688,0.6428571428571429
+689,0.6428571428571429
+690,0.6428571428571429
+691,0.6428571428571429
+692,0.6428571428571429
+693,0.6428571428571429
+694,0.6428571428571429
+695,0.6428571428571429
+696,0.6428571428571429
+697,0.7142857142857143
+698,0.8
+699,0.9
+700,0.6
+701,0.6
+702,0.9
+703,0.8
+704,0.7142857142857143
+705,0.6428571428571429
+706,0.6428571428571429
+707,0.6428571428571429
+708,0.6071428571428571
+709,0.6666666666666666
+710,0.9
+711,0.8
+712,0.5
+713,0.0
+714,0.0
+715,0.0
+716,0.0
+717,0.0
+718,0.0
+719,0.0
+720,0.0
+721,0.0
+722,0.0
+723,0.0
+724,0.0
+725,0.0
+726,0.0
+727,0.0
+728,0.0
+729,0.0
+730,0.0
+731,0.0
+732,0.0
+733,0.0
+734,0.0
+735,0.0
+736,0.0
+737,0.0
+738,0.0
+739,0.0
+740,0.0
+741,0.0
+742,0.0
+743,0.0
+744,0.0
+745,0.0
+746,0.0
+747,0.0
+748,0.0
+749,0.0
+750,0.0
+751,0.0
+752,0.0
+753,0.0
+754,0.0
+755,0.0
+756,0.0
+757,0.0
+758,0.0
+759,0.0
+760,0.0
+761,0.0
+762,0.0
+763,0.0
+764,0.0
+765,0.0
+766,0.0
+767,0.0
+768,0.0
+769,0.0
+770,0.0
+771,0.0
+772,0.0
+773,0.0
+774,0.0
+775,0.0
+776,0.0
+777,0.0
+778,0.0
+779,0.0
+780,0.0
+781,0.0
+782,0.0
+783,0.0
+784,0.0
+785,0.0
+786,0.0
+787,0.0
+788,0.0
+789,0.0
+790,0.0
+791,0.0
+792,0.0
+793,0.0
+794,0.0
+795,0.0
+796,0.0
+797,0.0
+798,0.0
+799,0.0
+800,0.0
+801,0.0
+802,0.0
+803,0.0
+804,0.0
+805,0.0
+806,0.0
+807,0.0
+808,0.0
+809,0.0
+810,0.0
+811,0.0
+812,0.0
+813,0.0
+814,0.0
+815,0.0
+816,0.0
+817,0.0
+818,0.0
+819,0.0
+820,0.0
+821,0.0
+822,0.0
+823,0.0
+824,0.0
+825,0.0
+826,0.0
+827,0.0
+828,0.0
+829,0.0
+830,0.0
+831,0.0
+832,0.0
+833,0.0
+834,0.0
+835,0.0
+836,0.0
+837,0.0
+838,0.0
+839,0.0
+840,0.0
+841,0.0
+842,0.0
+843,0.0
+844,0.0
+845,0.0
+846,0.0
+847,0.0
+848,0.0
+849,0.0
+850,0.0
+851,0.0
+852,0.0
+853,0.0
+854,0.0
+855,0.0
+856,0.0
+857,0.0
+858,0.0
+859,0.0
+860,0.0
+861,0.0
+862,0.0
+863,0.0
+864,0.0
+865,0.0
+866,0.0
+867,0.0
+868,0.0
+869,0.0
+870,0.0
+871,0.0
+872,0.0
+873,0.0
+874,0.0
+875,0.0
+876,0.0
+877,0.0
+878,0.0
+879,0.0
+880,0.0
+881,0.0
+882,0.0
+883,0.0
+884,0.0
+885,0.0
+886,0.0
+887,0.0
+888,0.0
+889,0.0
+890,0.0
+891,0.0
+892,0.0
+893,0.0
+894,0.0
+895,0.0
+896,0.0
+897,0.0
+898,0.0
+899,0.0
+900,0.0
+901,0.0
+902,0.0
+903,0.0
+904,0.0
+905,0.0
+906,0.0
+907,0.0
+908,0.0
+909,0.0
+910,0.0
+911,0.0
+912,0.0
+913,0.0
+914,0.0
+915,0.0
+916,0.0
+917,0.0
+918,0.0
+919,0.0
+920,0.0
+921,0.0
+922,0.0
+923,0.0
+924,0.0
+925,0.0
+926,0.0
+927,0.0
+928,0.0
+929,0.0
+930,0.0
+931,0.0
+932,0.0
+933,0.0
+934,0.0
+935,0.0
+936,0.0
+937,0.0
+938,0.0
+939,0.0
+940,0.0
+941,0.0
+942,0.0
+943,0.0
+944,0.0
+945,0.0
+946,0.0
+947,0.0
+948,0.0
+949,0.0
+950,0.0
+951,0.0
+952,0.0
+953,0.0
+954,0.0
+955,0.0
+956,0.0
+957,0.0
+958,0.0
+959,0.0
+960,0.0
+961,0.0
+962,0.0
+963,0.0
+964,0.0
+965,0.0
+966,0.0
+967,0.0
+968,0.0
+969,0.0
+970,0.0
+971,0.0
+972,0.0
+973,0.0
+974,0.0
+975,0.0
+976,0.0
+977,0.0
+978,0.0
+979,0.0
+980,0.0
+981,0.0
+982,0.0
+983,0.0
+984,0.0
+985,0.0
+986,0.0
+987,0.0
+988,0.0
+989,0.0
+990,0.0
+991,0.0
+992,0.0
+993,0.0
+994,0.0
+995,0.0
+996,0.0
+997,0.0
+998,0.0
+999,0.0
+1000,0.0
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_medium.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_medium.txt
new file mode 100644
index 000000000..c6b27f8af
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_medium.txt
@@ -0,0 +1,100 @@
+1,0.3333333333333333
+2,0.0
+3,0.0
+4,0.0
+5,0.027777777777777776
+6,0.0
+7,0.0
+8,0.0
+9,0.0
+10,0.0
+11,0.047619047619047616
+12,0.10714285714285714
+13,0.0
+14,0.0
+15,0.06666666666666667
+16,0.08333333333333333
+17,0.07142857142857142
+18,0.07142857142857142
+19,0.3333333333333333
+20,0.2
+21,0.1
+22,0.0
+23,0.0
+24,0.0
+25,0.03636363636363636
+26,0.0
+27,0.0
+28,0.0
+29,0.2
+30,0.0
+31,0.047619047619047616
+32,0.0
+33,0.0
+34,0.0
+35,0.0
+36,0.16666666666666666
+37,0.2
+38,0.047619047619047616
+39,0.0
+40,0.0
+41,0.06666666666666667
+42,0.0
+43,0.0
+44,0.1
+45,0.0
+46,0.0
+47,0.0
+48,0.0
+49,0.1111111111111111
+50,0.1111111111111111
+51,0.0
+52,0.0
+53,0.06666666666666667
+54,0.0
+55,0.047619047619047616
+56,0.0
+57,0.0
+58,0.027777777777777776
+59,0.0
+60,0.0
+61,0.0
+62,0.0
+63,0.0
+64,0.047619047619047616
+65,0.13333333333333333
+66,0.06666666666666667
+67,0.06666666666666667
+68,0.13333333333333333
+69,0.2
+70,0.10714285714285714
+71,0.047619047619047616
+72,0.19047619047619047
+73,0.06666666666666667
+74,0.2
+75,0.03571428571428571
+76,0.027777777777777776
+77,0.13333333333333333
+78,0.0
+79,0.0
+80,0.0
+81,0.047619047619047616
+82,0.0
+83,0.0
+84,0.0
+85,0.0
+86,0.0
+87,0.13333333333333333
+88,0.1
+89,0.03571428571428571
+90,0.05555555555555555
+91,0.05454545454545454
+92,0.0
+93,0.07142857142857142
+94,0.0
+95,0.0
+96,0.0
+97,0.0
+98,0.0
+99,0.13333333333333333
+100,0.09523809523809523
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_with_params.txt
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_with_params.txt
new file mode 100644
index 000000000..6be15e3de
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/expect/gql_algorithm_cluster_coefficient_with_params.txt
@@ -0,0 +1,4 @@
+1,0.16666666666666666
+2,0.0
+4,0.0
+6,0.0
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient.sql
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient.sql
new file mode 100644
index 000000000..6c380b4ad
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient.sql
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+CREATE TABLE result_tb (
+ vid int,
+ coefficient double
+) WITH (
+ type='file',
+ geaflow.dsl.file.path='${target}'
+);
+
+USE GRAPH modern;
+
+INSERT INTO result_tb
+CALL cluster_coefficient() YIELD (vid, coefficient)
+RETURN cast (vid as int), coefficient
+;
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_large.sql
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_large.sql
new file mode 100644
index 000000000..d9a6ddd78
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_large.sql
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+CREATE TABLE v_large (
+ id bigint,
+ name varchar,
+ attr varchar
+) WITH (
+ type='file',
+ geaflow.dsl.window.size = -1,
+ geaflow.dsl.file.path = 'resource:///data/large_graph_vertex.txt'
+);
+
+CREATE TABLE e_large (
+ srcId bigint,
+ targetId bigint
+) WITH (
+ type='file',
+ geaflow.dsl.window.size = -1,
+ geaflow.dsl.file.path = 'resource:///data/large_graph_edge.txt'
+);
+
+CREATE GRAPH large_graph (
+ Vertex node using v_large WITH ID(id),
+ Edge link using e_large WITH ID(srcId, targetId)
+) WITH (
+ storeType='memory',
+ shardCount = 8
+);
+
+CREATE TABLE result_tb (
+ vid int,
+ coefficient double
+) WITH (
+ type='file',
+ geaflow.dsl.file.path='${target}'
+);
+
+USE GRAPH large_graph;
+
+INSERT INTO result_tb
+CALL cluster_coefficient(3) YIELD (vid, coefficient)
+RETURN cast (vid as int), coefficient
+;
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_medium.sql
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_medium.sql
new file mode 100644
index 000000000..573345b7b
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_medium.sql
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+CREATE TABLE v_medium (
+ id bigint,
+ name varchar,
+ attr varchar
+) WITH (
+ type='file',
+ geaflow.dsl.window.size = -1,
+ geaflow.dsl.file.path = 'resource:///data/medium_graph_vertex.txt'
+);
+
+CREATE TABLE e_medium (
+ srcId bigint,
+ targetId bigint
+) WITH (
+ type='file',
+ geaflow.dsl.window.size = -1,
+ geaflow.dsl.file.path = 'resource:///data/medium_graph_edge.txt'
+);
+
+CREATE GRAPH medium_graph (
+ Vertex node using v_medium WITH ID(id),
+ Edge link using e_medium WITH ID(srcId, targetId)
+) WITH (
+ storeType='memory',
+ shardCount = 4
+);
+
+CREATE TABLE result_tb (
+ vid int,
+ coefficient double
+) WITH (
+ type='file',
+ geaflow.dsl.file.path='${target}'
+);
+
+USE GRAPH medium_graph;
+
+INSERT INTO result_tb
+CALL cluster_coefficient(2) YIELD (vid, coefficient)
+RETURN cast (vid as int), coefficient
+;
diff --git
a/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_with_params.sql
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_with_params.sql
new file mode 100644
index 000000000..8e0a48840
--- /dev/null
+++
b/geaflow/geaflow-dsl/geaflow-dsl-runtime/src/test/resources/query/gql_algorithm_cluster_coefficient_with_params.sql
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+CREATE TABLE result_tb (
+ vid int,
+ coefficient double
+) WITH (
+ type='file',
+ geaflow.dsl.file.path='${target}'
+);
+
+USE GRAPH modern;
+
+INSERT INTO result_tb
+CALL cluster_coefficient('person', 1) YIELD (vid, coefficient)
+RETURN cast (vid as int), coefficient
+;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]