如何将RDD或者MLLib矩阵进行转置操作
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,如何将RDD或者MLLib矩阵进行转置操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如何将Spark Mllib的矩
千家信息网最后更新 2025年02月04日如何将RDD或者MLLib矩阵进行转置操作
如何将RDD或者MLLib矩阵进行转置操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
如何将Spark Mllib的矩阵或者将一个RDD进行转置操作。Spark Mllib的矩阵有多种形式,分布式和非分布式,非分布式在这里浪尖就不讲了,很简单,因为他是基于数组的。而分布式存储是基于RDD的,那么问题就又变成了如何将一个RDD进行转置。
首先我们来介绍一下什么是转置操作:
百科上的定义,将一个矩阵的行列互换得到的矩阵就是该矩阵的转置。
要想把一个RDD的行列互换的话,主要思路如下:
1,先转化RDD,给每一行带上唯一的行号(row, rowIndex)。
2,针对RDD的每一行,转化为(value, colIndex),并整理的到(colIndex.toLong, (rowIndex, value))
3,进行flatmap
4,步骤3完成后,我们只需要按照3key进行分组,并按照其key进行排序就可以得到转化后列式有序。
5,完成步骤4后,我们就可以按照每一行的(rowIndex, value),使用下标和其值构建新的行,保证每一行转换后的顺序。
到此转换完成。
具体步骤如下:
def transposeRowMatrix(m: RowMatrix): RowMatrix = {
val transposedRowsRDD = m.rows.zipWithIndex.map{case (row, rowIndex) => rowToTransposedTriplet(row, rowIndex)}
.flatMap(x => x) // (newRowIndex, (newColIndex, value))
.groupByKey
.sortByKey().map(_._2) // 对row进行排序,去除掉索引
.map(buildRow) // 利用索引和值,重新构建每一行,去掉索引
new RowMatrix(transposedRowsRDD)
}
//转换每一行
def rowToTransposedTriplet(row: Vector, rowIndex: Long): Array[(Long, (Long, Double))] = {
val indexedRow = row.toArray.zipWithIndex
indexedRow.map{case (value, colIndex) => (colIndex.toLong, (rowIndex, value))}
}
//构建新的行
def buildRow(rowWithIndexes: Iterable[(Long, Double)]): Vector = {
val resArr = new Array[Double](rowWithIndexes.size)
rowWithIndexes.foreach{case (index, value) =>
resArr(index.toInt) = value
}
Vectors.dense(resArr)
}
测试
准备数据
val observations = sc.parallelize(
Seq(
Vectors.dense(1.0, 10.0, 100.0,2.0),
Vectors.dense(2.0, 20.0, 200.0,2.0),
Vectors.dense(3.0, 30.0, 300.0,2.0)
)
)
生成矩阵
val mat: RowMatrix = new RowMatrix(observations)
会发现行列已经互换。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
矩阵
一行
分布式
步骤
索引
行列
帮助
排序
有序
清楚
下标
内容
多种
对此
就是
形式
思路
数据
数组
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
徐汇区特殊软件开发推荐厂家
远程连接服务器的jvm分析工具
软件开发公司财务部副经理的职责
潍坊ios软件开发公司
哪些人最需要注意网络安全
温州市网络安全专家组
奶块ios服务器不可用
odbc能连接数据库吗
大数据管理和网络安全
大庆招工软件开发
网络安全保密视频
锡山区通用软件开发注意事项
数据库不使用大于小于
网络安全有关的文字和图片
查看本地数据库有多少用户
软件开发过程难度
网络安全在线
软件安全和网络安全区别
软件开发企业的帐务处理
交通运输厅网络安全管理办法
芜湖手机软件开发怎么收费
江西乐客网络技术有限公司
广州办公系统软件开发费用是多少
9.0同盟种族服务器
怎么远程进入服务器
橙光游戏软件开发商金手指
社区网络安全责任制
网易版服务器怎么刷东西
鹏城杯网络安全竞赛深圳
强大的语音对讲软件开发