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


总结

相关推荐
风落无尘5 小时前
《智能重生:从垃圾堆到AI工程师》——第二章 概率与生存
大数据·人工智能
档案宝档案管理5 小时前
无缝对接财务软件,实现会计档案全流程自动化流转
大数据
juniperhan5 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
科研前沿5 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
Elastic 中国社区官方博客6 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官6 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
samFuB6 小时前
【数据集】分省农林牧渔总产值、农业总产值数据(2007-2024年)
大数据
云天AI实战派7 小时前
AI 智能体问题排查指南:ChatGPT、API 调用到 Agent 上线失灵的全流程修复手册
大数据·人工智能·python·chatgpt·aigc
m0_466525298 小时前
酷特AGI:从“自家试验田”到“全球输出”
大数据·人工智能·agi
市象8 小时前
AI带给TCL空调的头部假想
大数据·人工智能