Java 类名:com.alibaba.alink.operator.batch.graph.VertexNeighborSearchBatchOp
Python 类名:VertexNeighborSearchBatchOp
节点k度邻居子图查询算法,根据用户输入的图数据和一组节点,在图中查找它们的k度邻居,然后导出子图。在子图较小时,还提供图可视化功能。
该组件至少接入一个输入桩,表示图的边集;可选接入第二个输入桩,表示图的点集。组件输出对应于输入桩,分别表示子图的边集和点集,其中点集在第二个输入桩有输入时才有输出。
| 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | 
|---|---|---|---|---|---|---|
| edgeSourceCol | 边表中起点所在列 | 边表中起点所在列 | String | ✓ | ||
| edgeTargetCol | 边表中终点所在列 | 边表中终点所在列 | String | ✓ | ||
| sources | 起始节点集合 | 起始节点集合 | String[] | ✓ | ||
| asUndirectedGraph | 是否为无向图 | 是否为无向图 | Boolean | true | ||
| depth | 深度 | 寻找邻居的深度 | Integer | 1 | ||
| vertexIdCol | 节点ID列 | 表示节点ID的列名 | String | “id” | 
from pyalink.alink import *
import pandas as pd
useLocalEnv(1)
df = pd.DataFrame([
    ["Alice", "Lisa", 1., "hello"],
		["Lisa", "Alice", 1., "hello"],
		["Lisa", "Karry", 1., "hello"],
		["Karry", "Lisa", 1., "213"],
		["Karry", "Bella", 1., "hello"],
		["Bella", "Karry", 1., "h123ello"],
		["Bella", "Lucy", 1., "hello"],
		["Lucy", "Bella", 1., "hello"],
		["Lucy", "Bob", 1., "123"],
		["Bob", "Lucy", 1., "hello"],
		["John", "Bob", 1., "hello"],
		["Bob", "John", 1., "hello"],
		["John", "Stella", 1., "123"],
		["Stella", "John", 1., "hello"],
		["Kate", "Stella", 1., "hello"],
		["Stella", "Kate", 1., "hello"],
		["Kate", "Jack", 1., "13"],
		["Jack", "Kate", 1., "hello"],
		["Jess", "Jack", 1., "13"],
		["Jack", "Jess", 1., "hello"],
		["Jess", "Jacob", 1., "hello"],
		["Jacob", "Jess", 1., "123"]]
)
data = BatchOperator.fromDataframe(df, schemaStr="start string, end string, value double, attr string")
op = VertexNeighborSearchBatchOp() \
    .setDepth(1) \
    .setSources(["John", "Lisa"]) \
    .setEdgeSourceCol("start") \
    .setEdgeTargetCol("end") \
    .setVertexIdCol("name") \
    .setAsUndirectedGraph(False)
op.linkFrom(data).print()
import org.apache.flink.types.Row;
import com.alibaba.alink.operator.batch.source.MemSourceBatchOp;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
public class VertexNeighborSearchBatchOpTest {
	@Test
	public void testDemo() throws Exception {
		List <Row> edgesRows = Arrays.asList(
			Row.of("Alice", "Lisa", 1., "hello"),
			Row.of("Lisa", "Alice", 1., "hello"),
			Row.of("Lisa", "Karry", 1., "hello"),
			Row.of("Karry", "Lisa", 1., "213"),
			Row.of("Karry", "Bella", 1., "hello"),
			Row.of("Bella", "Karry", 1., "h123ello"),
			Row.of("Bella", "Lucy", 1., "hello"),
			Row.of("Lucy", "Bella", 1., "hello"),
			Row.of("Lucy", "Bob", 1., "123"),
			Row.of("Bob", "Lucy", 1., "hello"),
			Row.of("John", "Bob", 1., "hello"),
			Row.of("Bob", "John", 1., "hello"),
			Row.of("John", "Stella", 1., "123"),
			Row.of("Stella", "John", 1., "hello"),
			Row.of("Kate", "Stella", 1., "hello"),
			Row.of("Stella", "Kate", 1., "hello"),
			Row.of("Kate", "Jack", 1., "13"),
			Row.of("Jack", "Kate", 1., "hello"),
			Row.of("Jess", "Jack", 1., "13"),
			Row.of("Jack", "Jess", 1., "hello"),
			Row.of("Jess", "Jacob", 1., "hello"),
			Row.of("Jacob", "Jess", 1., "123")
		);
		MemSourceBatchOp edgesSource = new MemSourceBatchOp(edgesRows,
			"start string, end string, value double, attr string");
		VertexNeighborSearchBatchOp op = new VertexNeighborSearchBatchOp()
			.setDepth(1)
			.setSources("John", "Lisa")
			.setEdgeSourceCol("start")
			.setEdgeTargetCol("end")
			.setVertexIdCol("name")
			.setAsUndirectedGraph(false);
		op.linkFrom(edgesSource).print();
	}
}
| start | end | value | attr | 
|---|---|---|---|
| Alice | Lisa | 1.0000 | hello | 
| Lisa | Karry | 1.0000 | hello | 
| John | Bob | 1.0000 | hello | 
| John | Stella | 1.0000 | 123 | 
| Lisa | Alice | 1.0000 | hello | 
| Karry | Lisa | 1.0000 | 213 | 
| Bob | John | 1.0000 | hello | 
| Stella | John | 1.0000 | hello |