【发布时间】:2017-10-23 07:06:57
【问题描述】:
我想使用 scala 将两个稀疏矩阵相乘。我以参数的形式传递这些矩阵并将结果存储在另一个参数中。 矩阵是文本文件,其中每个矩阵元素表示为:行、列、元素。
我无法在 Scala 中将两个 Double 值相乘。
object MultiplySpark {
def main(args: Array[ String ]) {
val conf = new SparkConf().setAppName("Multiply")
conf.setMaster("local[2]")
val sc = new SparkContext(conf)
val M = sc.textFile(args(0)).flatMap(entry => {
val rec = entry.split(",")
val row = rec(0).toInt
val column = rec(1).toInt
val value = rec(2).toDouble
for {pointer <-1 until rec.length} yield ((row,column),value)
})
val N = sc.textFile(args(0)).flatMap(entry => {
val rec = entry.split(",")
val row = rec(0).toInt
val column = rec(1).toInt
val value = rec(2).toDouble
for {pointer <-1 until rec.length} yield ((row,column),value)
})
val Mmap = M.map( e => (e._2,e))
val Nmap = N.map( d => (d._2,d))
val MNjoin = Mmap.join(Nmap).map{ case (k,(e,d)) => e._2.toDouble+","+d._2.toDouble }
val result = MNjoin.reduceByKey( (a,b) => a*b)
.map(entry => {
((entry._1._1, entry._1._2), entry._2)
})
.reduceByKey((a, b) => a + b)
result.saveAsTextFile(args(2))
sc.stop()
如何在 Scala 中将双精度值相乘?
请注意:
我试过a.toDouble * b.toDouble
错误是:值 * 不是 Double Double 的成员
【问题讨论】:
-
您应该发布实际的编译错误,而不仅仅是“给出错误”。
-
感谢您查看我的问题。我现在已经错误地修改了我的问题。请看一看。
标签: scala apache-spark