2017-10-22 13 views
0

スカラを使用してスパークで2つの疎行列を掛けたいと思います。私はこれらの行列を引数の形で渡し、結果を別の引数に格納しています。 行列はテキストファイルであり、各行列要素は行、列、要素として表されます。スカラーの "double"値の乗算

私はScalaで2つの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で倍数を掛けることができますか?ダブル

enter image description here

+0

"エラーを出す"だけでなく、実際のコンパイルエラーを投稿する必要があります。 –

+0

私の質問を見ていただきありがとうございます。私は今、間違いで私の質問を修正しました。見てください。 –

答えて

1

あなたがRDD[((Int, Int), Double)]を持っていた場合は、このreduceByKeyは(またはRDD[(SomeType, Double)]より一般的には)うまくいくダブルのメンバーではない値*とjoinができます:私は

エラーがあるa.toDouble * b.toDoubleを試してみました : ますのでご注意くださいあなたはRDD[((Int, Int), (Double, Double))]です。したがって、ではなく、(Double, Double)のペアを掛けようとしています。