Scala mapValues()类型不匹配

时间:2016-03-03 10:41:08

标签: scala

到目前为止,我在Scala中有一项任务,非常好。除此之外,所有内容都会编译:

@transient val aggs = msgs.transform { rdd => 
                                      val ts =  rdd.map(quote => quote.ts).max()  /// maximum of timestamp in the rdd
                                      rdd.map{ q => 
                                         ((q.symbol,q.ts),(q.price,ts))         /// ((String, Long), (Double, Long)) structure
                                       }
                                      }
                          .reduceByKey{ (x,y) => (x._1 + y._1, x._2 + y._2) }   // returns (Double, Long)
                          .mapValues( (x: Double,y: Long) => (y.toDouble / x.toDouble) ) // (Double, Long) => (Double)
                          .map{ case ((s,t),v) => (s,t,v)}

我坚持的作品是mapValues()

中的匿名函数
  

:95:错误:类型不匹配;

     

发现:( Double,Long)=>双

     

必需:((Double,Long))=> ?

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:4)

您提供了一个带有两个参数的函数,一个Double和一个Long,而不是一个带有一个参数的函数 - 一个元组(Double, Long)。如果你需要一个元组作为参数,请使用

.mapValues { case (x: Double,y: Long) => whatever }

请注意,您需要将case括起来{}而不是()

答案 1 :(得分:1)

作为slouc的回答的替代方案:
你可以使用untupeld

import Function.untupled

Map.empty mapValues untupled myMethodWithMultipleArguments

无论如何,要小心mapValues,因为它只是创建了一个view