kri*_*hna 12 scala apache-spark apache-spark-mllib
我需要添加两个存储在两个文件中的矩阵.
内容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,values.zipWithIndex.map(e => (e._2, 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
Run Code Online (Sandbox Code Playgroud)
我想添加r1,r2.那么,有没有办法RDD[mllib.linalg.Vector]在Apache-Spark中添加这两个.
jav*_*dba 19
这实际上是一个很好的问题.我经常使用mllib,并没有意识到这些基本的线性代数操作不容易访问.
关键是底层的微风矢量具有你所期望的所有线性代数操作 - 当然包括你特别提到的基本元素添加.
然而,通过以下方式隐藏了外界的微风实施:
[private mllib]
Run Code Online (Sandbox Code Playgroud)
那么,从外部世界/公共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 = {
...
}
Run Code Online (Sandbox Code Playgroud)
然而这样的可用方法的选择是有限的-而事实上也没有包括基本操作,包括元素方式加,减,乘,等
所以这是我能看到的最好的:
以下是一些示例代码:
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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10748 次 |
| 最近记录: |