如何将RDD或者MLLib矩阵进行转置操作
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,如何将RDD或者MLLib矩阵进行转置操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如何将Spark Mllib的矩
千家信息网最后更新 2025年12月02日如何将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安全错误
数据库的锁怎样保障安全
东南网络安全面试
武汉研究所数据库被黑客攻击
数据库between怎么用的
手机查软件服务器ip
梦想网络技术怎么样
前景好的聊天软件开发
数据库建完表后怎么调试系统
海外网网络安全
杭州软件开发基本工资
国家行标数据库下载
服务器怎样安装打印机
国家网络安全宣传周上海直播
工厂里的软件开发
河北华为服务器hba卡
access数据库课本答案
网络安全的实现通过
查找学术论文数据库
金仓互联网科技有限公司刘光昭
福山区直播软件开发
简单漂亮网络安全手抄报
计算机网络技术三级教科书
网络安全主要维护啥
ipad 被服务器拒绝
大型软件开发指南
阳江仓库管理软件开发
ado数据库操作支持库
ebi数据库序列查找步骤
网络安全教育的黑板报图片
凯撒网络安全
福山区直播软件开发