【问题标题】:Multiplication of "double" values in scalascala中“双”值的乘法
【发布时间】: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


【解决方案1】:

如果您有RDD[((Int, Int), Double)](或更一般的RDD[(SomeType, Double)])并且join 给您RDD[((Int, Int), (Double, Double))],则此reduceByKey 将起作用。所以你试图将(Double, Double) 相乘,而不是Doubles。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多