【发布时间】:2014-09-27 21:52:39
【问题描述】:
我需要添加两个存储在两个文件中的矩阵。
latest1.txt和latest2.txt的内容有下一个str:
我正在阅读这些文件如下:
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
我想添加 r1、r2。那么,有没有办法在 Apache-Spark 中添加这两个 RDD[mllib.linalg.Vector]s。
【问题讨论】:
-
将两个 RDD 压缩在一起,然后映射到生成的 RDD
-
是的,我确实喜欢 val rdd3=rdd1.zip(rdd2) scala> val rdd4 = rdd3.map{ e => e._1 + e._2} 我收到错误:22:错误:类型不匹配;找到: org.apache.spark.mllib.linalg.Vector 需要:String val r4=r3.map{e=>e._1 + e._2} 因为在 mllib 向量上没有 + 或 add 操作,所以定义了加法操作util.Vectors
-
看起来 + 不是添加两个向量的运算符,所以你得到了尝试转换为字符串的默认隐含。
-
是的,但我找不到任何执行加法的函数或运算符。
标签: scala apache-spark apache-spark-mllib