Spark Distributed matrix 分布式矩阵
RowMatrix行矩阵
import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.linalg.distributed.RowMatrix val df1 = Seq(
| (1.0, 2.0, 3.0),
| (1.1, 2.1, 3.1),
| (1.2, 2.2, 3.2)).toDF("c1", "c2", "c3")
df1: org.apache.spark.sql.DataFrame = [c1: double, c2: double ... 1 more field] df1.show
+---+---+---+
| c1| c2| c3|
+---+---+---+
|1.0|2.0|3.0|
|1.1|2.1|3.1|
|1.2|2.2|3.2|
+---+---+---+ // DataFrame转换成RDD[Vector]
val rowsVector= df1.rdd.map {
| x =>
| Vectors.dense(
| x(0).toString().toDouble,
| x(1).toString().toDouble,
| x(2).toString().toDouble)
| }
rowsVector: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MapPartitionsRDD[4] at map // Create a RowMatrix from an RDD[Vector].
val mat1: RowMatrix = new RowMatrix(rowsVector)
mat1: org.apache.spark.mllib.linalg.distributed.RowMatrix = org.apache.spark.mllib.linalg.distributed.RowMatrix@7ba821ef // Get its size.
val m = mat1.numRows()
m: Long = 3 val n = mat1.numCols()
n: Long = 3 // 将RowMatrix转换成DataFrame
val resDF = mat1.rows.map {
| x =>
| (x(0).toDouble,
| x(1).toDouble,
| x(2).toDouble)
| }.toDF("c1", "c2", "c3")
resDF: org.apache.spark.sql.DataFrame = [c1: double, c2: double ... 1 more field] resDF.show
+---+---+---+
| c1| c2| c3|
+---+---+---+
|1.0|2.0|3.0|
|1.1|2.1|3.1|
|1.2|2.2|3.2|
+---+---+---+ mat1.rows.collect().take(10)
res3: Array[org.apache.spark.mllib.linalg.Vector] = Array([1.0,2.0,3.0], [1.1,2.1,3.1], [1.2,2.2,3.2])
CoordinateMatrix坐标矩阵
import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry} // 第一列:行坐标;第二列:列坐标;第三列:矩阵元素
val df = Seq(
| (0, 0, 1.1), (0, 1, 1.2), (0, 2, 1.3),
| (1, 0, 2.1), (1, 1, 2.2), (1, 2, 2.3),
| (2, 0, 3.1), (2, 1, 3.2), (2, 2, 3.3),
| (3, 0, 4.1), (3, 1, 4.2), (3, 2, 4.3)).toDF("row", "col", "value")
df: org.apache.spark.sql.DataFrame = [row: int, col: int ... 1 more field] df.show
+---+---+-----+
|row|col|value|
+---+---+-----+
| 0| 0| 1.1|
| 0| 1| 1.2|
| 0| 2| 1.3|
| 1| 0| 2.1|
| 1| 1| 2.2|
| 1| 2| 2.3|
| 2| 0| 3.1|
| 2| 1| 3.2|
| 2| 2| 3.3|
| 3| 0| 4.1|
| 3| 1| 4.2|
| 3| 2| 4.3|
+---+---+-----+ // 生成入口矩阵
val entr = df.rdd.map { x =>
| val a = x(0).toString().toLong
| val b = x(1).toString().toLong
| val c = x(2).toString().toDouble
| MatrixEntry(a, b, c)
| }
entr: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.distributed.MatrixEntry] = MapPartitionsRDD[20] at map // 生成坐标矩阵
val mat: CoordinateMatrix = new CoordinateMatrix(entr)
mat: org.apache.spark.mllib.linalg.distributed.CoordinateMatrix = org.apache.spark.mllib.linalg.distributed.CoordinateMatrix@5381deec mat.numRows()
res5: Long = 4 mat.numCols()
res6: Long = 3 mat.entries.collect().take(10)
res7: Array[org.apache.spark.mllib.linalg.distributed.MatrixEntry] = Array(MatrixEntry(0,0,1.1), MatrixEntry(0,1,1.2), MatrixEntry(0,2,1.3), MatrixEntry(1,0,2.1), MatrixEntry(1,1,2.2), MatrixEntry(1,2,2.3), MatrixEntry(2,0,3.1), MatrixEntry(2,1,3.2), MatrixEntry(2,2,3.3), MatrixEntry(3,0,4.1)) // 坐标矩阵转成,带行索引的DataFrame,行索引为行坐标
val t = mat.toIndexedRowMatrix().rows.map { x =>
| val v=x.vector
| (x.index,v(0).toDouble, v(1).toDouble, v(2).toDouble)
| }
t: org.apache.spark.rdd.RDD[(Long, Double, Double, Double)] = MapPartitionsRDD[33] at map t.toDF().show
+---+---+---+---+
| _1| _2| _3| _4|
+---+---+---+---+
| 0|1.1|1.2|1.3|
| 1|2.1|2.2|2.3|
| 2|3.1|3.2|3.3|
| 3|4.1|4.2|4.3|
+---+---+---+---+ // 坐标矩阵转成DataFrame
val t1 = mat.toRowMatrix().rows.map { x =>
| (x(0).toDouble, x(1).toDouble, x(2).toDouble)
| }
t1: org.apache.spark.rdd.RDD[(Double, Double, Double)] = MapPartitionsRDD[26] at map t1.toDF().show
+---+---+---+
| _1| _2| _3|
+---+---+---+
|1.1|1.2|1.3|
|3.1|3.2|3.3|
|2.1|2.2|2.3|
|4.1|4.2|4.3|
+---+---+---+
Spark Distributed matrix 分布式矩阵的更多相关文章
- Spark Mllib里的分布式矩阵(行矩阵、带有行索引的行矩阵、坐标矩阵和块矩阵概念、构成)(图文详解)
不多说,直接上干货! Distributed matrix : 分布式矩阵 一般能采用分布式矩阵,说明这数据存储下来,量还是有一定的.在Spark Mllib里,提供了四种分布式矩阵存储形式,均由支 ...
- Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API
Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API 关键词:Local vector,Labeled point,Local matrix,Distrib ...
- [CareerCup] 1.7 Set Matrix Zeroes 矩阵赋零
1.7 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are ...
- A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...
- 在Hadoop2.2基础上安装Spark(伪分布式)
没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...
- css3 matrix 2D矩阵和canvas transform 2D矩阵
一看到“2D矩阵”这个高大上的名词,有的同学可能会有种畏惧感,“矩阵”,看起来好高深的样子,我还是看点简单的吧.其实本文就很简单,你只需要有一点点css3 transform的基础就好. 没有前戏,直 ...
- Leetcode 54:Spiral Matrix 螺旋矩阵
54:Spiral Matrix 螺旋矩阵 Given a matrix of m x n elements (m rows, n columns), return all elements of t ...
- bzoj 4128: Matrix ——BSGS&&矩阵快速幂&&哈希
题目 给定矩阵A, B和模数p,求最小的正整数x满足 A^x = B(mod p). 分析 与整数的离散对数类似,只不过普通乘法换乘了矩阵乘法. 由于矩阵的求逆麻烦,使用 $A^{km-t} = B( ...
- 【Distributed】分布式解决方案【汇总】
一.问题引出 二.分布式Session问题 三.网站跨域问题 四.分布式任务调度平台 五.分布式配置中心 六.分布式锁解决方案 七.缓存技术 一.问题引出 [Distributed]分布式系统中遇到的 ...
随机推荐
- GMA Round 1 抛硬币
传送门 抛硬币 扔一个硬币,正面概率为0.6.扔这枚硬币666次,正面就得3分,反面就得1分,求总分的方差. 直接套公式$np(1-p)*(X-Y)^2=666*0.6*(1-0.6)*(3-1)^2 ...
- poj3273 Monthly Expense(二分搜索)
https://vjudge.net/problem/POJ-3273 认真审题,代码仔细!!ans的初值应该是1 #include<iostream> #include<cstdi ...
- C10K问题
转自:https://www.jianshu.com/p/ba7fa25d3590 C10K问题由来 随着互联网的普及,应用的用户群体几何倍增长,此时服务器性能问题就出现.最初的服务器是基于进程/线程 ...
- FileUpload1.PostedFile.FileName 获取的文件名
例如文件叫做 c:\web\a.jpg 如果用IE,则返回 c:\web\a.jpg 含路径 如果用Chrome,则返回 a.jpg 不含路径.
- 【网络安全】SSLSplit实现中间人攻击
中间人攻击,即在中间监听获取网络数据以便获取的有价值的信息实现攻击破坏的目的,即client-mid man-server,此处介绍的sslsplit可以作为mid man监听ssl信息及HTTP信息 ...
- iOS实现 webView loadHTMLString加载外部css、js样式
记录一下. webview(或wk)用 loadHTMLString加载内容时 ,如果只是单纯的html内容,样式等都写在内部,直接设置baseURL为nil即可. 不过当html里包含外部样式或调用 ...
- Python 能做什么?
Python 能做什么? Python具有简单.易学.免费.开源.可移植.可扩展.可嵌入.面向对象等优点,我所关注的是网络爬虫方面,2018即将到来,我准备步入python的世界. Hello,wor ...
- java mqtt
代码: package cc.gongchang.mqtt; import java.net.URISyntaxException; import org.fusesource.hawtdispatc ...
- 物联网架构成长之路(25)-Docker构建项目用到的镜像1
0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...
- Sublime Text 输入法跟随光标
通过PackageControl安装“IMESupport”,重启Sublime Text3,即可解决: 注:如项目自述,仅支持Windows.