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 分布式矩阵的更多相关文章

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

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

  2. Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API

    Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API 关键词:Local vector,Labeled point,Local matrix,Distrib ...

  3. [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 ...

  4. A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记

    最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...

  5. 在Hadoop2.2基础上安装Spark(伪分布式)

    没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...

  6. css3 matrix 2D矩阵和canvas transform 2D矩阵

    一看到“2D矩阵”这个高大上的名词,有的同学可能会有种畏惧感,“矩阵”,看起来好高深的样子,我还是看点简单的吧.其实本文就很简单,你只需要有一点点css3 transform的基础就好. 没有前戏,直 ...

  7. Leetcode 54:Spiral Matrix 螺旋矩阵

    54:Spiral Matrix 螺旋矩阵 Given a matrix of m x n elements (m rows, n columns), return all elements of t ...

  8. bzoj 4128: Matrix ——BSGS&&矩阵快速幂&&哈希

    题目 给定矩阵A, B和模数p,求最小的正整数x满足 A^x = B(mod p). 分析 与整数的离散对数类似,只不过普通乘法换乘了矩阵乘法. 由于矩阵的求逆麻烦,使用 $A^{km-t} = B( ...

  9. 【Distributed】分布式解决方案【汇总】

    一.问题引出 二.分布式Session问题 三.网站跨域问题 四.分布式任务调度平台 五.分布式配置中心 六.分布式锁解决方案 七.缓存技术 一.问题引出 [Distributed]分布式系统中遇到的 ...

随机推荐

  1. JSAP107

    JSAP107 1.目标 2. 需要考虑的问题: 案例:图片随着鼠标飞兼容性代码 <!DOCTYPE html> <html lang="en"> < ...

  2. [Nuget]使用Nuget管理工具包

    摘要 这里演示如何使用Nuget对类库进行打包,并将类库上传到nuget上面. 步骤 1.在nuget官网注册账号,并登陆. https://www.nuget.org 2.下载Nuget.exe,并 ...

  3. performSelector may cause a leak because its selector is unknown

    转自:http://www.jianshu.com/p/6517ab655be7 问题 我在 ARC 模式下编译出了这个 warning: "performSelector may caus ...

  4. MediaInfo代码阅读

      MediaInfo是一个用来分析媒体文件的开源工具. 支持的文件非常全面,基本上支持所有的媒体文件. 最近是在做HEVC开发,所以比较关注MediaInfo中关于HEVC的分析与处理. 从Meid ...

  5. Linux(CentOS)下,下载安装Nginx并配置

    1.准备工作选首先安装这几个软件:GCC,PCRE(Perl Compatible Regular Expression),zlib,OpenSSL.Nginx是C写的,需要用GCC编译:Nginx的 ...

  6. Hexo 博客 github.io MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. AI 名校课程&书籍 需要学习

    斯坦福李飞飞-深度学习计算机视觉 http://study.163.com/course/introduction/1003223001.htm 斯坦福李飞飞-深度学习计算机视觉---视频下载 htt ...

  8. python线程池(threadpool)模块使用笔记 .python 线程池使用推荐

    一.安装与简介 pip install threadpool pool = ThreadPool(poolsize) requests = makeRequests(some_callable, li ...

  9. 印象笔记中的美人鱼 mermaid

    美人鱼 mermaid 是印象笔记中Markdown模式下新增的一种代码模式,它能支持更多的高级图表功能,如流程图.甘特图.时序图. 我最喜欢的应该是甘特图,最惊喜的是流程图. 当然,印象笔记还支持其 ...

  10. FasterRCNN 提升分类精度(转)

    近年来,随着深度学习的崛起,计算机视觉得到飞速发展.目标检测作为计算机视觉的基础算法,也搭上了深度学习的快车.基于Proposal的检测框架,从R-CNN到Faster R-CNN,算法性能越来越高, ...