2017-05-14 8 views
1

を指定する削減:のMapReduce - 私はこのコードを持って最後colum

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),(1,1))

しかし、私は三番目をコンパイルするとき、私はこのエラーを取得:

<console>:29: error: type mismatch; 
found : (Int, Int) 
required: String 
     satir.reduce({ case ((a,b),(k,o)) =>o+o}) 
を私が欲しいのは(a、b)は、 '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) 

あなたは、この背後にある理論を理解するために気にした場合:あなたは `test3.tsv`ファイルの内容でこの質問を更新することができ

関連する問題