MapReduce - 减少到指定最后一个列

时间:2017-05-14 13:57:44

标签: scala mapreduce

我有这段代码:

 1.   var data = sc.textFile("test3.tsv")
 2.   var satir = data.map(line=> ((line.split("\t")(1),line.split("\t")(2)),(1,1)))
 3.   satir.reduce(((a,b),(c,k)) => k + k)

第一个和第二个正常工作。我想要的是减少(a,b),指定最后一个'

例如,像这样:

  

((A,B),(1,1))

但是当我编译第三个时,我得到了这个错误:

<console>:29: error: type mismatch;
 found   : (Int, Int)
 required: String
       satir.reduce({ case ((a,b),(k,o)) =>o+o})

我该怎么办?

1 个答案:

答案 0 :(得分:0)

当你减少一个值时,输出值类型必须与输入值类型相同,你可以改用folding方法,因为你可以和他一起返回另一种类型。

scala.io.Source.fromFile("test3.tsv")
    .getLines
    .toList
    .map { line => 
        val value = line.split("\t")
        ((value(0), value(1)), (1,1))
    }
    .foldLeft(0)((response, tuple) => tuple._2._2 + tuple._2._2)

如果你想了解这背后的理论: