【发布时间】:2015-12-16 04:57:13
【问题描述】:
我正在 Apache Spark MLlib 中实现一些机器学习算法,我想将向量与标量相乘:
其中 u_i_j_m 是 Double 而 x_i 是向量
我尝试了以下方法:
import breeze.linalg.{ DenseVector => BDV, Vector => BV}
import org.apache.spark.mllib.linalg.{DenseVector, Vectors, Vector}
...
private def runAlgorithm(data: RDD[VectorWithNorm]): = {
...
data.mapPartitions { data_ponts =>
c = Array.fill(clustersNum)(BDV.zeros[Double](dim).asInstanceOf[BV[Double]])
...
data_ponts.foreach { data_point =>
...
u_i_j_m : Double = ....
val temp= data_point.vector * u_i_j_m)
// c(j) = temp
}
}
}
其中 VectorWithNorm 定义如下:
class VectorWithNorm(val vector: Vector, val norm: Double) extends Serializable {
def this(vector: Vector) = this(vector, Vectors.norm(vector, 2.0))
def this(array: Array[Double]) = this(Vectors.dense(array))
def toDense: VectorWithNorm = new VectorWithNorm(Vectors.dense(vector.toArray), norm)
}
但是当我构建项目时出现以下错误:
错误:值 * 不是 org.apache.spark.mllib.linalg.Vector 的成员 val temp = (data_point.vector * u_i_j_m)
我怎样才能正确地做这个乘法?
【问题讨论】:
-
u_i_j_m : Double不是缺少val吗?还是你只是不小心把它删掉了? -
u_i_j_m 的计算很复杂,所以我省略了。
标签: scala apache-spark apache-spark-mllib