使用SparkGraphX进行图计算时的编码问题

使用SparkGraphX进行图计算时的编码问题

在SparkGraphX体系中,要求图网络中的点ID必须为Long类型,不像Python中的networkX工具包支持字符串类型的节点表示,但在现实场景中,有很多情况下,点ID都是字符串类型的,如身份证号、设备号或是埋点采集到的uid等等,都不是单纯能够使用Long类型来表示的。

为解决上述问题,本文将提出两种解决方案,分别是Hash编码以及Row_number编码,接下来本文将详细描述上述两种方案的优缺点以及实现代码(基于Scala实现)。

文章目录


一、Hash编码

与Python自带的Hash编码不同,Java中的hash编码,多次执行,对同一变量得到的Hash编码相同,Python中带有随机因子,多次执行结果不一样。

但Java自带的Hash编码由于使用了截断(得到的编码是Int类型,取值范围相对较小),在大数据量容易出现Hash碰撞问题,但在数据量较小的时候,还是非常好用的并且实现非常简单。
Hash编码

一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、Row_number编码

另一种编码方案即为借助SQL中的开窗函数row_number的功能,对所有的点ID都生成一个递增的编码,保留原ID与编码之间的对应关系(一个DataFrame),使用编码ID进行后续的图计算,计算完成后再将编码结果转换回原ID结果。

相比Hash编码,这种编码方案的优点很明显,完全不用担心碰撞问题,能够精准保证原ID与编码ID一一对应,但缺点也很明显,计算效率会降低,尤其在大数据量下执行row_number操作,虽然Spark内部对这类函数做了优化,但是效率仍然是一个大问题,依靠提高并发以及分配更多的资源能一定程度上提高运行效率,但与Hash编码依然是没法比,还是要做权衡,如果数据量不大,对精度要求不高,一般优先使用Hash编码;如果数据量较大或是对精度要求比较高的场景,则优先考虑row_number实现方案。

Row_number编码 实现代码


总结

相关推荐
qq_508823401 天前
金融量化指标--2Alpha 阿尔法
大数据·人工智能
好家伙VCC1 天前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
2301_781668611 天前
Elasticsearch 02
大数据·elasticsearch·搜索引擎
isfox1 天前
Google GFS 深度解析:分布式文件系统的开山之作
大数据·hadoop
用户Taobaoapi20141 天前
京东店铺所有商品API技术开发文档
大数据·数据挖掘·数据分析
在未来等你1 天前
Kafka面试精讲 Day 8:日志清理与数据保留策略
大数据·分布式·面试·kafka·消息队列
江畔独步1 天前
Flink TaskManager日志时间与实际时间有偏差
大数据·flink
TDengine (老段)1 天前
TDengine 选择函数 Last() 用户手册
大数据·数据库·sql·物联网·时序数据库·tdengine·涛思数据
TDengine (老段)1 天前
TDengine 选择函数 First 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
沧海一粟青草喂马1 天前
抖音批量上传视频怎么弄?抖音矩阵账号管理的专业指南
大数据·人工智能·矩阵