我有这段代码:
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})
我该怎么办?
答案 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)
如果你想了解这背后的理论: