一颗蔬菜

我虽是只猫却也常常思考

向量

  • 在Spark中,向量是以对象形式存储的
  • 在学习过程中,我们一般使用稠密向量,主要使用Vectors工厂方法生成

实践

创建向量对象
  • 方法一

    scala> val v1 = org.apache.spark.mllib.linalg.Vectors.dense(1,2,3,4)
    
    v1: org.apache.spark.mllib.linalg.Vector = [1.0,2.0,3.0,4.0]
  • 方法二

    scala> val v2 = breeze.linalg.DenseVector(1,2,3,4)
    
    v2: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4)
  • 两者的区别
    方法二创建的向量对象支持基本运算,而方法一不支持。breeze为向量提供了基本运算。breeze实际上是mllib的顶层依赖,mllib在对breeze进行二次封装时屏蔽了breeze的一些方法,所以mllib下的向量无法进行基本运算。
运算
  • 向量相加

    scala> v2 + v2
    res0: breeze.linalg.DenseVector[Int] = DenseVector(2, 4, 6, 8)
  • 转置

    scala> v2.t
    res1: breeze.linalg.Transpose[breeze.linalg.DenseVector[Int]] = Transpose(DenseVector(1, 2, 3, 4))
  • 叉乘

    scala> v2 * v2.t
    res2: breeze.linalg.DenseMatrix[Int] =
    1  2  3   4
    2  4  6   8
    3  6  9   12
    4  8  12  16

矩阵

  • 在Spark中,矩阵是以对象的形式存储的
  • 在学习中,我们一般使用稠密矩阵,主要使用Matrices工厂方法生成

实践

创建矩阵对象
  • 方法一

    scala> val m1 = org.apache.spark.mllib.linalg.Matrices.dense(2,3,Array(1,2,3,4,5,6))
    m1: org.apache.spark.mllib.linalg.Matrix =
    1.0  3.0  5.0
    2.0  4.0  6.0
  • 方法二

    scala> val m2 = breeze.linalg.DenseMatrix(Array(1,2,3),Array(4,5,6))
    m2: breeze.linalg.DenseMatrix[Int] =
    1  2  3
    4  5  6
    
    scala> val m2 = breeze.linalg.DenseMatrix(Array(1,2,3,4,5,6))
    m2: breeze.linalg.DenseMatrix[Int] = 1  2  3  4  5  6
    
    scala> m2.reshape(2,3)
    res3: breeze.linalg.DenseMatrix[Int] =
    1  3  5
    2  4  6
  • 两者的区别
    方法二创建的矩阵对象支持基本运算,而方法一不支持。breeze为矩阵提供了基本运算。breeze实际上是mllib的顶层依赖,mllib在对breeze进行二次封装时屏蔽了breeze的一些方法,所以mllib下的矩阵无法进行基本运算。
运算
  • 转置相乘

    scala> val m3 = breeze.linalg.DenseMatrix(Array(1,2,3),Array(4,5,6))
    m3: breeze.linalg.DenseMatrix[Int] =
    1  2  3
    4  5  6
    
    scala> m3 * m3.t
    res4: breeze.linalg.DenseMatrix[Int] =
    14  32
    32  77

使用brreze的缺点

  • 使用breeze是在单节点上运算 ,适用于计算量比较小的计算。在分布式计算中,使用breeze是性能比较差的。如果要做一些计算量比较大的计算时,建议使用分布式计算框架。对于一些计算量不大的情况,直接使用breeze即可。

版权声明:本文为原创文章,版权归 一颗蔬菜 所有,转载请联系博主获得授权!
本文地址:https://www.suwenjin.com/index.php/archives/243/

发表评论

正在加载 Emoji