

# 图算法

> 译者：[flink.sojb.cn](https://flink.sojb.cn/)


`Graph`用于组装API和顶级算法的逻辑块可在Gelly中作为`org.apache.flink.graph.asm`包中的图形算法访问。这些算法通过配置参数提供优化和调整，并且在使用类似配置处理相同输入时可以提供隐式运行时重用。

---

算法：`degree.annotate.directed。VertexInDegree`

描述：使用in-degree 注释有[向图的](#graph-representation)顶点。


```
DataSet&lt;Vertex&lt;K, LongValue&gt;&gt; inDegree = graph
  .run(new VertexInDegree()
    .setIncludeZeroDegreeVertices(true));
```


可选配置：

*   **setIncludeZeroDegreeVertices**：默认情况下，只处理边集的计算程度; 设置此标志时，将对顶点集执行附加连接，以便输出度为零的顶点

*   **setParallelism**：覆盖 算子并行度

---

算法：`degree.annotate.directed。VertexOutDegree`

描述：使用out-degree 注释有[向图的](#graph-representation)顶点。


```
DataSet&lt;Vertex&lt;K, LongValue&gt;&gt; outDegree = graph
  .run(new VertexOutDegree()
    .setIncludeZeroDegreeVertices(true));
```


可选配置：

*   **setIncludeZeroDegreeVertices**：默认情况下，只处理边集的计算程度; 设置此标志时，将对顶点集执行附加连接，以便输出out-degree为零的顶点

*   **setParallelism**：覆盖 算子并行度

---

算法：`degree.annotate.directed。VertexDegrees`

描述：使用degree，out-degree和in-degree 注释有[向图的](#graph-representation)顶点。


```
DataSet&lt;Vertex&lt;K, Tuple2&lt;LongValue, LongValue&gt;&gt;&gt; degrees = graph
  .run(new VertexDegrees()
    .setIncludeZeroDegreeVertices(true));
```


可选配置：

*   **setIncludeZeroDegreeVertices**：默认情况下，只处理边集的计算程度; 设置此标志时，将对顶点集执行附加连接，以便输出out-and-degree为零的顶点

*   **setParallelism**：覆盖 算子并行度

---

算法：`degree.annotate.directed。EdgeSourceDegrees`

描述：使用源ID的度，出度和度数来标注有[向图的](#graph-representation)边。


```
DataSet&lt;Edge&lt;K, Tuple2&lt;EV, Degrees&gt;&gt;&gt; sourceDegrees = graph
  .run(new EdgeSourceDegrees());
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`degree.annotate.directed。EdgeTargetDegrees`

描述：使用目标ID的度，出度和度数来标注有[向图的](#graph-representation)边。


```
DataSet&lt;Edge&lt;K, Tuple2&lt;EV, Degrees&gt;&gt;&gt; targetDegrees = graph
  .run(new EdgeTargetDegrees();
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`degree.annotate.directed。EdgeDegreesPair`

描述：使用源顶点和目标顶点的度，出度和度数来标注有[向图](#graph-representation)的边。


```
DataSet&lt;Edge&lt;K, Tuple2&lt;EV, Degrees&gt;&gt;&gt; degrees = graph
  .run(new EdgeDegreesPair());
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`degree.annotate.undirected。VertexDegree`

描述：用度数注释[无向图的](#graph-representation)顶点。


```
DataSet&lt;Vertex&lt;K, LongValue&gt;&gt; degree = graph
  .run(new VertexDegree()
    .setIncludeZeroDegreeVertices(true)
    .setReduceOnTargetId(true));
```


可选配置：

*   **setIncludeZeroDegreeVertices**：默认情况下，只处理边集的计算程度; 设置此标志时，将对顶点集执行附加连接，以便输出度数为零的顶点

*   **setParallelism**：覆盖 算子并行度

*   **setReduceOnTargetId**：可以从边缘源ID或目标ID计算度数。默认情况下，会计算源ID。如果输入边缘列表按目标ID排序，则Reduce目标ID可以优化算法。

---

算法：`degree.annotate.undirected。EdgeSourceDegree`

描述：使用源ID的度数注释[无向图的](#graph-representation)边。


```
DataSet&lt;Edge&lt;K, Tuple2&lt;EV, LongValue&gt;&gt;&gt; sourceDegree = graph
  .run(new EdgeSourceDegree()
    .setReduceOnTargetId(true));
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

*   **setReduceOnTargetId**：可以从边缘源ID或目标ID计算度数。默认情况下，会计算源ID。如果输入边缘列表按目标ID排序，则Reduce目标ID可以优化算法。

---

算法：`degree.annotate.undirected。EdgeTargetDegree`

描述：使用目标ID的度数注释[无向图的](#graph-representation)边。


```
DataSet&lt;Edge&lt;K, Tuple2&lt;EV, LongValue&gt;&gt;&gt; targetDegree = graph
  .run(new EdgeTargetDegree()
    .setReduceOnSourceId(true));
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

*   **setReduceOnSourceId**：可以从边缘源ID或目标ID计算度。默认情况下，计算目标ID。如果输入边缘列表按源ID排序，则Reduce源ID可以优化算法。

---

算法：`degree.annotate.undirected。EdgeDegreePair`

描述：使用源顶点和目标顶点的度数注释[无向图](#graph-representation)的边。


```
DataSet&lt;Edge&lt;K, Tuple3&lt;EV, LongValue, LongValue&gt;&gt;&gt; pairDegree = graph
  .run(new EdgeDegreePair()
    .setReduceOnTargetId(true));
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

*   **setReduceOnTargetId**：可以从边缘源ID或目标ID计算度数。默认情况下，会计算源ID。如果输入边缘列表按目标ID排序，则Reduce目标ID可以优化算法。

---

算法：`degree.filter.undirected。MaximumDegree`

描述：按最大程度Filter[无向图](#graph-representation)。


```
Graph&lt;K, VV, EV&gt; filteredGraph = graph
  .run(new MaximumDegree(5000)
    .setBroadcastHighDegreeVertices(true)
    .setReduceOnTargetId(true));
```


可选配置：

*   **setBroadcastHighDegreeVertices**：使用广播哈希连接高度顶点，以在删除相对较少数量的高度顶点时Reduce数据混洗。

*   **setParallelism**：覆盖 算子并行度

*   **setReduceOnTargetId**：可以从边缘源ID或目标ID计算度数。默认情况下，会计算源ID。如果输入边缘列表按目标ID排序，则Reduce目标ID可以优化算法。

---

算法：`simple.directed。简化`

描述：从有[向图中](#graph-representation)删除自循环和重复边。


```
graph.run(new Simplify());
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`simple.undirected。简化`

描述：添加对称边并[从无向图中](#graph-representation)移除自循环和复制边。


```
graph.run(new Simplify());
```


可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`翻译。TranslateGraphIds`

描述：使用给定的转换顶点和边ID `TranslateFunction`。


```
graph.run(new TranslateGraphIds(new LongValueToStringValue()));
```


所需配置：

*   **翻译器**：实现类型或值转换

可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`翻译。TranslateVertexValues`

描述：使用给定的转换顶点值`TranslateFunction`。


```
graph.run(new TranslateVertexValues(new LongValueAddOffset(vertexCount)));
```


所需配置：

*   **翻译器**：实现类型或值转换

可选配置：

*   **setParallelism**：覆盖 算子并行度

---

算法：`翻译。TranslateEdgeValues`

描述：使用给定的转换边缘值`TranslateFunction`。


```
graph.run(new TranslateEdgeValues(new Nullify()));
```


所需配置：

*   **翻译器**：实现类型或值转换

可选配置：

*   **setParallelism**：覆盖 算子并行度


