2017-10-22 1 views
0

스칼라를 사용하여 스파크에서 두 개의 희소 행렬을 곱하려고합니다. 나는 인수의 형태로 이러한 행렬을 전달하고 또 다른 인수에 결과를 저장합니다. 행렬은 각 행렬 요소가 행, 열, 요소로 표시되는 텍스트 파일입니다.스칼라에서 "double"값의 곱

스칼라에서 두 개의 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() 

스칼라에서 어떻게 두 값을 곱할 수 있습니까? 더블

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) 쌍을 곱하려고합니다.