:スパークRDD、(キー、(タプル))以上削減する必要がある
val data: Array[(Int, (Double, Int))] = Array((2,(2.1463120403829962,7340)), (1,(1.4532644653720025,4280)))
構造は今(groupId,(acum,count))
ですしたいすべてのタプルの合計を取得するために減らす:
(k1,(a1,n1)),(k2,(a2,n2))
が必要:
(a1+a2),(n1+n2)
単純な作業のように聞こえる、そう:
val mainMean = groups.reduce((acc,v)=>(acc._1 + v._1,acc._2 + v._2))
とget:
:33: error: type mismatch; found : (Double, Int) required: String val mainMean = groups.reduce((acc,v)=>(acc._1 + v._1,acc._2 + v._2))
はまた試してみました:
val mainMean = groups.reduce((k,(acc,v))=>(acc._1 + v._1,acc._2 + v._2))
と教えてくれます。注:タプルを直接非構造することはできませんメソッドまたは関数のパラメータで指定します。 、Tuple2を受け入れ、単一のパラメータを作成したり、匿名関数ので
パターンマッチングを検討し次のいずれかの私はそれを初心者の質問を知っているが、私はこだわっています
val mainMean = groups.reduce({case(k,(acc,n))=>(k,(acc._1+n._1,acc._1+n._2))})
と
error: type mismatch; found : (Int, (Double, Int)) required: Int
を取得しますその上に
を 'reduceByKey((ACC、V)=>(acc._1 + v._1、acc._2 + v._2))に関する詳細な情報を見つけることができます'、今は、acumulatorsとすべてのグループのカウントを合計する必要があります、それは私が示したように2つのステップで行うことができますが、私は1つをしたい。 – user2232395