当前位置:网站首页>快速开发 GraphScope 图分析应用
快速开发 GraphScope 图分析应用
2022-07-30 05:48:00 【graphscope】
我们开发了一个 C++ 模板库,用户只需将几个函数替换成自定义的逻辑,便可自定义图分析算法并运行在 GraphScope 上。
图是大数据的一种重要数据来源,围绕着图的各种分析技术也具有广泛的应用。图计算的核心在于算法,如 PageRank、K-Core 等算法已在节点重要性分析场景下展现出强大的能力。GraphScope 的图分析引擎继承了 GRAPE 系统的开源版本,内置了多种图分析算法,可在路径查找、社区发现等领域提供一站式的图分析解决方案;然而,用户往往也需要根据自身的需求定制一些算法,因此,为了方便用户开发自定义图分析算法,我们提供了一个 C++ 模版库,本文接下来将介绍该模版库的使用方式。
Step1. 安装 GraphScope
首先,我们需要通过如下命令在本地环境下安装 GraphScope:
pip3 install graphscope
Step2. 使用模版库开发算法
使用浏览器打开模版库的 GitHub 地址,点击该库右侧的 Use this template
按钮创建一个属于你自己的代码仓库,并通过如下命令将仓库克隆到本地:
# Make sure to replace the <username> and <repo-name> to the right values.
git clone https://github.com/<username>/<repo-name>.git
cd <repo-name>
接下来,我们通过修改 src
目录下的文件,实现自定义算法逻辑,其中:
my_app.h
: 该文件用于实现算法主逻辑,即PEval
和IncEval
函数;my_app_context.h
: 该文件用于存储、定义算法运行时的结果和使用到的数据结构。
定义算法运行时需要的数据结构
为了简化算法逻辑,突出算法的开发过程,在本例中,我们的算法将负责统计图中每个节点的邻居节点的度数总和。在这一步中,我们需要在 my_app_context.h
文件中:1) 定义算法运行时的数据结构;2) 在 Init
函数中初始化这些数据结构。
算法运行时数据结构如下:
变量名 | 类型 | 作用 |
---|---|---|
result | vertex_array_t<size_t> | 存储每个节点的计算结果 |
degree | vertex_array_t<size_t> | 辅助数据结构,存储每个节点的度数 |
最终,my_app_context.h
实现如下:
实现算法逻辑
数据结构定义完成后,我们可在 my_app.h
中实现对应算法逻辑,即 PEval 和 IncEval 函数。关于 PEval 和 IncEval 函数的定义,可参考 PIE 编程模型的介绍。在这个例子中,
- PEval 函数: 获取每个内部节点的度数,并沿着出边发送消息;
- IncEval 函数: 1) 负责接收、处理来自上一轮的消息;2) 统计每个节点的邻居节点的度数之和。
最终,完整的 my_app.h
实现如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WsI3SVy-1658738305019)(https://files.mdnice.com/user/24781/653b7ec0-fca7-46d0-b9f9-3614d52b8f71.png)]
Step3. 构建并测试
在本地构建并测试你的算法
使用如下命令,编译构建算法:
make build & cd build
cmake .. && make # 编译算法
make package # 将算法打包成可在 GraphScope 上运行的资源 (.gar文件)
在 GraphScope 集群上运行算法
算法开发完成后,我们便可将对应的算法资源 (gar文件) 运行在 GraphScope 集群上,具体步骤如下:
import graphscope
graphscope.set_option(show_log=True)
from graphscope.framework.app import load_app
from graphscope.dataset import load_p2p_network
sess = graphscope.session(cluster_type="hosts")
simple_graph = load_p2p_network(sess)._project_to_simple()
my_app = load_app('<path_to_your_gar_resource>')
result = my_app(simple_graph)
print(result.to_numpy("r"))
结语
本文详细介绍了如何基于 C++ 模版库快速开发一款可在 GraphScope 集群上运行的图分析算法,后续我们也会分享更多基于该模版库开发的真实场景下的算法案例,敬请期待!点击链接即可获得模版库的源代码。同时也欢迎关注 GraphScope 公众号及GitHub,及时了解图计算相关的知识及 GraphScope 的研发进展。
边栏推荐
- vs compile boost library script
- 藏不住了,我要揭露云原生的那些不好
- Real-time waveform display of CAN communication data based on QT (serial eight) ==== "Sub function or new class calls ui control"
- 含 3 个单元 PEG 的 ADC linker的PC DBCO-PEG3-Biotin
- -----博客声明
- 不依赖框架的文件下载
- 进制详解(二进制、八进制、十进制、十六进制详解及相互转换,位运算)
- 【部分项目展示】
- Vim find character
- SSH-RSA密钥
猜你喜欢
无法完成包的安装npm ERR! Refusing to install package with name “moment“ under a package also called “moment“
OP 代币和不可转让的 NFT 致力于建立新的数字民主
基于STM32F103的消防系统之驱动电机风扇
牛顿迭代法求方程的根
IO进程线程->标准IO->day1
[Quick MSP430f149] Notes on learning MSP430f149 during the game
DADPS Biotin Azide( CAS:1260247-50-4生物素基团和叠氮基团的 PEG 衍生物
图扑数字孪生煤矿开采系统,打造采煤“硬实力”
js advanced study notes (detailed)
Duplicate keys detected:‘/da…‘
随机推荐
Written before the official account - QT, ARM, DSP, microcontroller, power electronics and transmission!
[Quick MSP430f149] Notes on learning MSP430f149 during the game
《C陷阱和缺陷》void (*signal(int , void(*)(int)))(int)的深刻解读
读取GZ包的内容代码
c语言编程练习
Biotin-SS-NHS ester|生物素-二硫键-活性酯|CAS:122266-55-1具有良好的水溶性
不依赖框架的文件下载
51数码管显示
DADPS-生物素-炔基_CAS:2241685-22-1试剂反应原理
C#二叉树的遍历方法(通过递归)
Kunlun state screen production (serial 3) - based article (button serial port to send)
QT serial 4: LORA test platform based on QT and STM32H750 (3)
基于精灵(Sprite)管道烟雾流动效果
IEEE在指定期刊下搜索相关论文
基于STM32F103的消防系统之火焰传感器
每日一知识:手写深拷贝和浅拷贝(解决了循环引用的问题)
【markdown常用用法】
QT weekly skills (3)~~~~~~~~~ serial port addition
图扑软件携手华为云再创合作共赢新局面
lcd1602调试