加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 添加两个RDD [mllib.linalg.Vector]

发布时间:2020-12-16 21:31:48 所属栏目:安全 来源:网络整理
导读:我需要添加两个存储在两个文件中的矩阵. latest1.txt和latest2.txt的内容有下一个str: 1 2 34 5 67 8 9 我正在读这些文件如下: scala val rows = sc.textFile(“latest1.txt”).map { line = val values = line.split(‘ ‘).map(_.toDouble) Vectors.spar
我需要添加两个存储在两个文件中的矩阵.

latest1.txt和latest2.txt的内容有下一个str:

1 2 3
4 5 6
7 8 9

我正在读这些文件如下:

scala> val rows = sc.textFile(“latest1.txt”).map { line => val values = line.split(‘ ‘).map(_.toDouble)
    Vectors.sparse(values.length,values.zipWithIndex.map(e => (e._2,e._1)).filter(_._2 != 0.0))
}

scala> val r1 = rows
r1: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MappedRDD[2] at map at :14

scala> val rows = sc.textFile(“latest2.txt”).map { line => val values = line.split(‘ ‘).map(_.toDouble)
    Vectors.sparse(values.length,e._1)).filter(_._2 != 0.0))
}

scala> val r2 = rows
r2: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MappedRDD[2] at map at :14

我想添加r1,r2.那么,有没有办法在Apache-Spark中添加这两个RDD [mllib.linalg.Vector].

解决方法

这实际上是一个很好的问题.我经常与mllib一起工作,没有意识到这些基本的线性代数操作是不容易访问的.

关键是,下面的微风向量具有您期望的所有线性代数操作 – 包括您特别提到的基本元素添加.

然而,微风的实施是通过以下方式从外部世界隐藏的:

[private mllib]

那么那么从外部世界/公共API的角度看,我们如何访问这些原语?

其中一些已经暴露出来:例如平方和:

/**
 * Returns the squared distance between two Vectors.
 * @param v1 first Vector.
 * @param v2 second Vector.
 * @return squared distance between two Vectors.
 */
def sqdist(v1: Vector,v2: Vector): Double = { 
  ...
}

然而,这种可用方法的选择是有限的 – 实际上不包括基本操作,包括元素加法,减法,乘法等.

所以这是最好的我可以看到:

>将向量转换为微风:
>在微风中执行矢量操作
>从微风回到mllib向量

以下是一些示例代码:

val v1 = Vectors.dense(1.0,2.0,3.0)
val v2 = Vectors.dense(4.0,5.0,6.0)
val bv1 = new DenseVector(v1.toArray)
val bv2 = new DenseVector(v2.toArray)

val vectout = Vectors.dense((bv1 + bv2).toArray)
vectout: org.apache.spark.mllib.linalg.Vector = [5.0,7.0,9.0]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读