一文看懂大数据矩阵运算利器-Spark Distributed Matrix

article/2025/9/19 18:27:00

如今是大数据的时代,数据呈指数型增长,那么如何利用这些数据?离不开大数据计算,今天小普给大家介绍的是:Spark的分布式计算框架,它能很好地适配大数据场景下的计算任务。

【相似度计算】是金融领域或商品推荐等领域的常见需求,如果需要计算M个用户两两之间的相似度情况,若用户特征个数为N。

如果采用循环遍历的计算方式,我们需要计算M*(M-1)次才能得到两两用户之间的相似度情况。

而如果我们采用矩阵计算的方式,只需构造一个M*N维的矩阵A,

做一些简单的矩阵运算:

运算的结果矩阵元素的下标,就对应这用户与用户之间的欧式距离情况,如元素A32, 便是用户3和用户2的欧式距离。在数据量较大的情况,相较于循环遍历的方法,矩阵运算可以节省很多时间。

然而,大数据场景下,数据量经常会变得非常极端,如:

要计算1亿个用户两两之间的相似度,哪怕用户的特征维度仅为5,也需要构造一个100,000,000*5 的矩阵。而矩阵计算过程中的中间矩阵,如

A*AT

会得到100,000,000*100,000,000 的中间矩阵

如果直接进行内存运算的话,大概需要9094Tb 的内存,势必会导致内存溢出。

Spark 的分布式矩阵为上述大数据场景提供了一种可行的解决方案,在介绍分布式矩阵之前,需要先介绍Spark.mllib中的矩阵特质。

Spark的spark.mlib.linalg.distributed所使用的分布式矩阵,使得开发人员可以根据不同的场景、不同的计算需求,将用于计算的矩阵进行拆分,利用map-reduce的思想将整块矩阵的计算map成子矩阵的操作,从而得以在一个矩阵的计算步中,矩阵各部分在不同的计算单元上同步进行,最终将结果reduce汇总,从而得到计算结果。

在介绍分布式矩阵之前,需要先介绍Spark的本地矩阵

LocalMatrix

其中本地矩阵主要可以分为DenseMatrix(稠密矩阵)与SparseMatrix(稀疏矩阵)

DenseMatrix(稠密矩阵)

mlib中存储稠密矩阵的形式只有两种,都需要给定行数和列数,以及数值数组,而后分为按列主序存储(默认)和按行主序存储

图引用自csdn

稠密矩阵就是我们平时常见的矩阵储存方式,通常我们把每一个样本的特征,以行向量的形式存储在矩阵之中。

SparseMatrix(稀疏矩阵)

稀疏矩阵的概念主要是为了区分与稠密矩阵,在现实场景中,由于数据本身的特质(抑或数据缺失等各种原因),会存在矩阵中含0元素非常多的情况。

这时,采用SparseMatrix,仅存储矩阵中的非0元素,便能用较少的空间描述矩阵的本质。

mlib中的SparseMatrix稀疏矩阵以列起始号、行号、元素数值三个数组进行存储,具体的构造方法在之后的内容中将体现,我们先以一张示意图看一下mlib是如何以稀疏矩阵的形式存储矩阵的:

图引用自csdn

DistributedMatrix

spark.mlib.linalg.distributed 中主要包含四种矩阵存储形式类,分别是RowMatrix类、IndexedRowMatrix类、CoordinateMatrix类和BlockMatrix类。下面

RowMatrix类与IndexedRowMatrix类

RowMatrix类与IndexedRowMatrix类相似,矩阵存储时都需要给定行数和列数,以及数值数组,而后分为按列主序存储(默认)和按行主序存储。

但与本地的DenseMatrix不同的是,RowMatrix与IndexedRowMatrix会把一整个完整地矩阵按行进行切分,把一个矩阵分布式地存储与若干个机器之中。

但是,当样本的特征维度过于巨大时(如:行向量Va=(x1,x2,x3...x1,000,000,000)1*1,000,000,000),RowMatrix与IndexedRowMatrix存储形式仍然会有内存溢出的风险。

CoordinateMatrix类

Spark中CoordinateMatrix类的存储方式与本地SparseMatrix的存数形式类似,以始号、行号、元素数值三个数组进行存储,不同的是COordinateMatrix会对稀疏矩阵进行分布式存储。

由于CoordinateMatrix是以三元组的形式进行数据存储,因此,相较于RowMatrix,不容易出现内存溢出的情况。

BlockMatrix类

BlockMatrix是分布式矩阵存储中最常用的类型,它将矩阵按行列分块存储。基于BlockMatrix,

借用BlockMatrix,Spark可以把一个巨大的矩阵拆分为若干个子矩阵。

在矩阵乘法A x B中,分块矩阵乘法结果矩阵中每个子矩阵是A的一个行分块与B的一个列分块相乘得到的结果,而在Spark的mlib中,两个矩阵乘法所产生的task数正是这行列相乘的次数,即将每一个行列相乘在一个计算单元上处理,如果A的行列分块数是m x n,B的行列分块数是n x k,则task的个数,也就是并行度为m x k,当引入 numMidDimSplits 后并行度增加为m x k x numMidDimSplits,实则对A的行子矩阵与B的列子矩阵进行矩阵乘时,再按 numMidDimSplits 的个数对A的行子矩阵和B的列子矩阵进行拆分,从而将每一个A的行子矩阵和B的列子矩阵的乘法拆分成 numMidDimSplits 个矩阵乘法,通过对A的列索引对 numMidDimSplits 取余和B的行索引对 numMidDimSplits 取余可以得到每个子矩阵在再次拆分后的每个计算子块中的下标,实现对矩阵乘法运算更大的并行加速。如下图所示:

通过调整 numMidDimSplits的值对分布式并行矩阵乘法再次分块并行,从而使得并行度增加。

灵活应用Spark的LocalMatrix和DistributedMatrix,可以有避免大数据运算中容易面临内存溢出、运算过慢的情况。

感谢你看到这里,如果你想学习技术干货,收藏栏目不迷路~


http://chatgpt.dhexx.cn/article/bNQpR7ir.shtml

相关文章

紧跟时代步伐,朗强HDMI分布式矩阵可以通过手机来控制

近年来,随着AV与IT不断的深入融合,分布式技术成为信号处理行业的一大热点。朗强科技作为音视频信号行业领导者,一直以来不断加大研发力度,不断推出引领市场潮流的产品。现隆重推出一款集大屏拼接、显示控制功能于一体的分布式矩阵…

朗强:紧跟时代步伐!HDMI分布式矩阵可以通过手机来控制!

近年来,随着AV与IT不断的深入融合,分布式技术成为信号处理行业的一大热点。朗强科技作为音视频信号行业领导者,一直以来不断加大研发力度,不断推出引领市场潮流的产品。现隆重推出一款集大屏拼接、显示控制功能于一体的分布式矩阵…

编码分布式矩阵乘法(Coded Distributed Matrix Multiplication, CDMM)问题简单介绍

许多现代分布式计算框架都会遇到大规模分布式矩阵乘法问题,即计算两个大规模矩阵和的乘积,如MapReduce、Spark。由于分布式计算系统会出现的无法预测的时延,主节点(master node)必须等到最慢的工作节点(worker node)完…

手把手推导分布式矩阵乘的最优并行策略

作者|郭冉、李一鹏、柳俊丞、袁进辉 常用深度学习框架的自动并行机制还不够完善,还需要用户根据经验来配置并行方式,这给开发者带来了不小的智力负担。因此,实现自动最优并行就成为一个有趣的课题。 矩阵乘是深度学习最常用的底层…

CAP原理应用与分布式矩阵

CAP原理是描述一致性,可用性,和分区兼容性的理论,但这个原理用在实际情况下时往往让人很困惑。什么样的情况适用于这样的原理?有哪些先决条件?如何创建一个同时满足一致性和可用性,分区兼容性的分布式系统&…

【Scala-spark.mlib】分布式矩阵——分布式计算的基石与利器

分布式矩阵 1. mlib.linalg.distributed包2. DistributedMatrix特质3. BlockMatrix类4. CoordinateMatrix类5. IndexedRowMatrix类6. RowMatrix类7. 小结 1. mlib.linalg.distributed包 矩阵计算是很多科学计算的重要步骤,而分布式矩阵存储则是分布式计算的基础。根…

Spark Mllib里的分布式矩阵(行矩阵、带有行索引的行矩阵、坐标矩阵和块矩阵概念、构成)(图文详解)...

不多说,直接上干货! Distributed matrix : 分布式矩阵  一般能采用分布式矩阵,说明这数据存储下来,量还是有一定的。在Spark Mllib里,提供了四种分布式矩阵存储形式,均由支持长整形的行列数和…

Shiro权限管理详解(授权和注解开发)【面试点】

Shiro权限管理详解 1. 权限管理1.1什么是权限管理1.2用户身份认证1.2.1 概念1.2.2 用户名密码身份认证流程1.2.3 关键对象 1.3 授权1.3.1 概念 1.3.2 授权流程1.3.3 关键对象1.3.4 权限模型1.3.5 权限分配1.3.6 权限控制1.3.6.1 基于角色的访问控制 1. 权限管理 1.1什么是权限…

Shiro权限管理之自定义Realm

文章目录 1. SpringBoot集成shiro快速入门1. shiro 用户认证2. shiro用户授权 2. SpringBoot 使用IniRealm进行认证授权3. Spring Boot 使用 JdbcRealm 进行认证授权1. 数据库驱动2. 数据库表结构3. 创建 testJdbcRealm方法4. 更改数据库表名 4. Spring Boot 使用自定义 Realm …

权限管理框架Shiro简介

Shiro 1、shiro简介 shiro是一个强大易用的java安全框架,可以帮助我们完成:身份认证、授权、加密、会话管理、与web集成、缓存等。 包括了三个核心组件:Subject、SecurityManage和Realm 外部架构 内部架构 authentication(认证…

Java shiro权限管理框架视频教程

shiro权限管理框架视频教程 中级 共14课 权限系统在任何一个系统中都存在,随着分布式系统的大行其道,权限系统也趋向服务化,对于一个高级工程师来说,权限系统的设计是必不可少需要掌握的技术栈。 课程简介 权限系统在任何一个…

【Shiro权限管理】一、简介

一、简介 Apache Shiro 是Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与Web 集成、缓存等。 官网地址&#xf…

SSM集成shiro权限管理

这几天在学习了shiro权限管理框架,在刚开始的时候学的时候因为这个配置问题困扰了我很长时间,所以在这篇文章我整合了自己用SSM搭建shiro权限框架的过程。 1.配置 1.1jar包 在项目配置开始前需要先导入shiro的相关jar包,下载地址&#xff1a…

shiro权限管理的应用

shiro权限管理的应用 官网:http://shiro.apache.org 一, 什么是权限管理: 对系统中的资源进行权限配置 , 对资源的一种保护 ; 一般需要进过两个步骤: 身份认证- 授权 - 资源访问; 1.1 身份认证&…

shiro权限管理框架简介(一)

一:什么是shiro? shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。 spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。 s…

shiro权限管理框架学习

一、权限框架简介 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户身份认证和授权两…

shiro权限管理的配置

建立一个权限管理配置类,在类上添加注解Configuration,如下: 1、设置安全管理 Bean public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessio…

Shiro 权限管理入门之认证与授权

Shiro 权限管理什么是权限管理?什么是身份认证?什么是授权? Shiro 是什么?Shiro 的核心架构Shiro 中的认证认证关键对象认证流程认证的开发自定义 RealmSimpleAccountRealm开发自定义 Realm MD5 和 Salt自定义 md5 salt 的 Realm 并验证 Sh…

Shiro权限管理详解

1权限管理1.1什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份…

Shiro权限控制

目录 认识Shiro的整体架构,各组件的概念简介Shiro与Spring Security比较Shiro整体架构 Shiro认证,授权的过程shiro认证Shiro授权 Shiro自定义的Realm,FilterIniRealm配置文件JdbcRealm自定义Realmshiro加密 Shiro Session管理Shiro 缓存管理S…