如何在scala中查找过滤值的总平均值

时间:2017-10-31 23:19:41

标签: scala apache-spark

以下代码允许我使用每个过滤器键的总和。如何将所有值相加并求平均值。即结合所有过滤值的结果。

val f= p.groupBy(d => (d.Id))
                      .mapValues(totavg =>           
                      (totavg.groupBy(_.Day).filterKeys(Set(2,3,4)).mapValues(_.map(_.Amount))

示例输出:

Map(A9 -> Map(2 -> List(473.3, 676.48), 4 -> List(685.45, 812.73))

我想将所有值加在一起并计算总平均值。 即(473.3 + 676.48 + 685.45 + 812.73)/ 4

1 个答案:

答案 0 :(得分:0)

对于给定的Map,您可以先应用flatMap两次以返回值序列,然后计算平均值:

val m = Map("A9" -> Map(2 -> List(473.3, 676.48), 4 -> List(685.45, 812.73)))

val s = m.flatMap(_._2.flatMap(_._2))
// s: scala.collection.immutable.Iterable[Double] = List(473.3, 676.48, 685.45, 812.73)

s.sum/s.size
// res14: Double = 661.99