使用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编码 实现代码


总结

相关推荐
ebok.1 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
民乐团扒谱机3 小时前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
星野川崎2063 小时前
电商多店运维:云机长期挂机频繁掉线、账号无故风控原因剖析与解决方案
大数据·运维·云计算·电商
小柯南敲键盘4 小时前
电商图片翻译工具推荐,批量处理主图视频字幕,免费试用
大数据·人工智能·python·音视频
观远数据4 小时前
零售连锁BI选型清单:什么样的场景适合ChatBI,什么样的场景不适合
大数据·人工智能·零售
大大大大晴天4 小时前
实时数仓怎么建:基于 StarRocks 的分层设计与实践
大数据
roman_日积跬步-终至千里6 小时前
【计算资源节省与稳定性治理】自助查询系统请求幂等性设计
大数据
小玮看世界7 小时前
当“安全“变成“教训“:《拟人化暂行办法》时代,AI护栏的过度拒答之困与破局
大数据·人工智能
FserSuN8 小时前
回顾Spark的概念与应用
大数据·分布式·spark
一知半解仙8 小时前
大国博弈与机器人纪元:我们正站在怎样的历史拐点?
大数据·人工智能·机器人