【发布时间】:2015-12-05 21:00:36
【问题描述】:
我正在关注Spark Programming Guide,但遇到accumulator 和Vector 的一些问题
我有以下对象定义VectorAccumulatorParam:
object VectorAccumulatorParam extends AccumulatorParam[Vector] {
def zeros(initialValue: Vector): Vector = {
Vectors.zeros( initialValue.size )
}
def addInPlace(v1: Vector, v2: Vector): Vector = {
v1 += v2
}
}
它的用法如下:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.AccumulatorParam
import org.apache.spark.mllib.linalg.{Vector, Vectors}
object SimpleSpark {
def main(arg: Array[String]) = {
/* some coed */
val valAccum = sc.accumulator( Vector(1, 2, 3) )(VectorAccumulatorParam)
/* some coed */
}
但我有两个错误:
[error] /home/cliu/Documents/github/Apache-Spark/src/main/scala/SimpleSpark.scala:125: type mismatch;
[error] found : VectorAccumulatorParam.type
[error] required: org.apache.spark.AccumulatorParam[scala.collection.immutable.Vector[Int]]
[error] val valAccum = sc.accumulator( Vector(1, 2, 3) )(VectorAccumulatorParam)
[error] ^
[error] /home/cliu/Documents/github/Apache-Spark/src/main/scala/SimpleSpark.scala:170: value += is not a member of org.apache.spark.mllib.linalg.Vector
[error] v1 += v2
[error] ^
第一:为什么会出现类型不匹配?这是编程指南中写的内容。它应该返回一个Vector。
第二:如果v1 += v2操作不起作用,为什么指南是这样的?
【问题讨论】:
标签: scala apache-spark