zoukankan      html  css  js  c++  java
  • spark 创建稀疏向量和矩阵

     http://blog.csdn.net/canglingye/article/details/41316193

    【相互转换】:http://stackoverflow.com/questions/32456808/sparsevector-to-densevector-conversion-in-pyspark

     

    1、稀疏矩阵和稠密矩阵可以转换成数组

    2、数组可以转换成稠密矩阵

    3、稀疏矩阵不能直接转换为稠密矩阵,需要先转换为数组;但是,数组和稠密矩阵都不能直接转换为稀疏矩阵

     from pyspark.mllib.linalg import SparseVector, DenseVector

    s1=SparseVector(5,{4:1.})  

     >>> s1

    SparseVector(5, {4: 1.0})

    >>> a1=s1.toArray()
    >>> a1
    array([ 0., 0., 0., 0., 1.])

    d1=DenseVector(a1)

    >>> d1
    DenseVector([0.0, 0.0, 0.0, 0.0, 1.0])

    a2=d1.toArray()
    >>> a2
    array([ 0., 0., 0., 0., 1.])

     通过函数将rdd转成稀疏矩阵

    ####转稀疏矩阵
      def sparse(p):
             vec=[int(x) for x in p[2:]]
             lvec=len(vec)
             dic1={}
             for i in range(lvec):
                if vec[i]==1:
                   dic1[i]=1
         return [p[0],p[1],SparseVector(lvec,dic1)]


         lt11=lt8.map(sparse)

    >>> lt11.take(2)

    [ [u'ANDROID-5a9ac5c22ad94e26b2fa24e296787a35', u'0', SparseVector(10000, {3: 1.0, 13: 1.0, 64: 1.0, 441: 1.0, 801: 1.0})],

    [u'ANDROID-188949641b6c4f1f8c1c79b5c7760c2f', u'0', SparseVector(10000, {2: 1.0, 3: 1.0, 4: 1.0, 13: 1.0, 27: 1.0, 39: 1.0, 41: 1.0, 150: 1.0, 736: 1.0, 9675: 1.0})] ]

     

    1、本地向量

    MLlib的本地向量主要分为两种,DenseVector和SparseVector,顾名思义,前者是用来保存稠密向量,后者是用来保存稀疏向量,
    其创建方式主要有一下三种(三种方式均创建了向量(1.0, 0.0, 3.0):
     
    1. import org.apache.spark.mllib.linalg.{Vector, Vectors}  
    2. //创建一个稠密向量  
    3. val dv : Vector = Vector.dense(1.0,0.0,3.0);  
    4. //创建一个稀疏向量(第一种方式)  
    5. val sv1: Vector = Vector.sparse(3, Array(0,2), Array(1.0,3.0));  
    6. //创建一个稀疏向量(第二种方式)  
    7. val sv2 : Vector = Vector.sparse(3, Seq((0,1.0),(2,3.0))

    对于稠密向量:很直观,你要创建什么,就加入什么,其函数声明为Vector.dense(values : Array[Double])

    对于稀疏向量,当采用第一种方式时,3表示此向量的长度第一个Array(0,2)表示的索引,第二个Array(1.0, 3.0)与前面的Array(0,2)是相互对应的,表示第0个位置的值为1.0,第2个位置的值为3

    对于稀疏向量,当采用第二种方式时,3表示此向量的长度,后面的比较直观,Seq里面每一对都是(索引,值)的形式。
     
  • 相关阅读:
    简单封装DBUtils 和 pymysql 并实现简单的逆向工程生成class 类的py文件
    python学习第42、43天 HTMLCSS
    python学习第40天
    python学习第41天
    python学习第39天
    python学习第38天
    python学习第37天
    python学习第36天
    python学习第35天
    json转换为字典
  • 原文地址:https://www.cnblogs.com/zhangbojiangfeng/p/6115263.html
Copyright © 2011-2022 走看看