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

news/2024/9/18 21:18:43/ 标签: scala, 大数据

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

在SparkGraphX体系中,要求图网络中的点ID必须为Long类型,不像Python中的networkX工具包支持字符串类型的节点表示,但在现实场景中,有很多情况下,点ID都是字符串类型的,如身份证号、设备号或是埋点采集到的uid等等,都不是单纯能够使用Long类型来表示的。
为解决上述问题,本文将提出两种解决方案,分别是Hash编码以及Row_number编码,接下来本文将详细描述上述两种方案的优缺点以及实现代码(基于Scala实现)。

文章目录

  • 使用SparkGraphX进行图计算时的编码问题
  • 一、Hash编码
  • 一、pandas是什么?
  • 二、Row_number编码
  • 总结


一、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编码 实现代码


总结

在这里插入图片描述


http://www.ppmy.cn/news/1518577.html

相关文章

网络原理 TCP与UDP协议

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 1.应用层 之前编写完了基本的 java socket ,要知道,我们之前所写的所有代码都在应⽤层,都是为了 完成某项…

Ubuntu18.04 下安装CUDA

安装步骤 1.查看是否安装了cuda # 法1 cat /usr/local/cuda/version.txt # 法2 nvcc --version 2.若没有安装,则查看是否有N卡驱动,若无N卡驱动,则到软件与更新 -> 附加驱动中安装驱动 3.查看N卡驱动支持的cuda版本 nvidia-smi 如下…

哪些领域最适合采用音视频私有化解决方案?

随着数字化时代的到来,音视频通信已成为各行各业不可或缺的一部分,从企业内部沟通到在线教育、远程医疗、金融交易等,无一不依赖于稳定、高效且安全的音视频技术。然而,不同的行业对音视频通信的需求各不相同,尤其在数…

微信小程序代码目录结构介绍

文件描述app.js小程序的入口文件,负责监听和处理小程序的生命周期函数,以及定义一些全局的公共方法和数据。app.json公共全局配置文件。app.wxss公共全局样式文件。project.config.json项目的配置文件,包含一些项目级别的配置,如项…

使用Vue创建cesium项目模版该如何选择?

目录 问题描述模版说明及选用建议小结 问题描述 刚入手这个项目,什么都是一知半解。使用Vue,创建Cesium项目的时候,提示需要选择一个模版(如下图所示),该如何选择项目模版选,总结如下: 模版说明…

Django+Vue音乐推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

Java基础入门【第六章 static、继承、重写、多态】(二)

5.访问控制 对象中的属性和方法,可以根据不同的权限修饰符(public > protected > default > private)来进行访问控制。 1)概述 类中的属性和方法,可以使用以下四种权限修饰符进行访问控制: pu…

python列表实现矩阵行列转换

本文采用列表嵌套实现矩阵的行列转换。 第一种方法(此方法来源于https://docs.python.org/zh-cn/3/tutorial/datastructures.html#list-comprehensions matrix [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] print([[row[i] for row in matrix] for i i…

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出 文章目录 一、基本原理1. 数据预处理2. PSO优化(粒子群优化)3. KELM训练(核极限学习机)4. AdaBoost集成5. 模型评估和优化6.…

【C语言】深入理解指针(四)qsort函数的实现

指针4 1.回调函数是什么2.qsort使用举例3.qsort函数的模拟实现 1.回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的…

C语言初阶 --- 数据在内存中的存储

🎈 个人主页👉:tbRNA-CSDN博客 💯 个人简介:在校大学生一枚💋. 😍 希望我的文章对大家有着不一样的帮助,欢迎大家关注我,感谢大家的多多支持! 🎉 …

【ragflow】安装2:源码安装依赖

中文文档【ragflow】安装1: docker:失败官方说的成功 docker 安装的启动失败 重新来一遍,不会重新拉取: root@k8s-master-pfsrv:/home/zhangbin/perfwork/rag# cd ragflow/ root@k8s-master-pfsrv:/home/

互联网应用主流框架整合之Spring缓存机制和Redis结合

Redis和数据库的结合 在实际的商用软件使用中,通常都是Redis和关系型数据配置使用,单纯使用Redis来存数据成本太高,并且其持久化和计算能力偏差,这两块无法和关系型数据相比较,而Redis和关系型数据库共存的场景就会带来另一个问题,就是在两者之间的数据一致性的问题,有…

Electron 项目实战 02:打包和自动更新

技术选型 electron-forgeelectron-builder electron-forge 是Electron 官方文档介绍的,打包和发布都包含了,但是包含的坑也非常多。electron-builder下载量和集成打包非常顺利,本教程也是采用electron-buid来介绍打包。大家在技术选型的时候…

RabbitMQ练习(Routing)

1、RabbitMQ教程 《RabbitMQ Tutorials》https://www.rabbitmq.com/tutorials 2、环境准备 参考:《RabbitMQ练习(Hello World)》和《RabbitMQ练习(Work Queues)》。 确保RabbitMQ、Sender、Receiver、Receiver2容器…

ip地址变化是什么意思?手机地址ip一直变化怎么办

IP地址作为互联网设备的唯一标识,‌其稳定性对于网络连接至关重要。‌然而,‌手机IP地址频繁变动可能带来一系列问题。‌本文将深入探讨IP地址变化的含义、‌IP地址频繁变动的原因,‌以及提供手机地址IP一直变化的有效应对策略。‌ 一、IP地址…

LLaMA-Factory微调入门个人重制版

LLaMA-Factory微调入门个人重制版 说明: 首次发表日期:2024-08-30LLaMA-Factory 官方Github仓库: https://github.com/hiyouga/LLaMA-Factory 关于 本文是对LLaMA-Factory入门教程 https://zhuanlan.zhihu.com/p/695287607 的个人重制版&…

每天一个数据分析题(五百零二)- 分割式聚类算法

以下哪个选项是分割式聚类算法? A. K-Means。 B. Centroid Method C. Ward’s Method D. 以上皆非 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL,统计学&#…

Spring MVC中的DispatcherServlet:核心调度者

在Spring MVC框架中,DispatcherServlet扮演着至关重要的角色,它是整个请求处理流程的核心组件和调度者。本文将深入探讨DispatcherServlet的工作原理、主要职责以及在Spring MVC应用中的重要作用。 一、引言 Spring MVC是一种基于Java的实现了Web MVC设…

优化系统性能:深入探讨Web层缓存与Redis应用的挑战与对策

Web层缓存对于提高应用性能至关重要,它通过减少重复的数据处理和数据库查询来加快响应时间。例如,如果一个用户请求的数据已经缓存,服务器可以直接从缓存中返回结果,避免了每次请求都进行复杂的计算或数据库查询。这不仅提高了应用…