Spark .mapValues设置了多个值

时间:2015-06-08 14:27:33

标签: scala apache-spark

我正在尝试设置mapValues,以便我可以做些什么 我创建了以下RDD:

res10: Array[(Int, (Double, Double, Double))] = Array((1,(9.1383276E7,1.868480924818E12,4488.0)), (22,(107667.11999999922,2582934.208799982,4488.0)), (2,(2.15141303E8,1.0585204549689E13,4488.0)), (3,(4488.0,4488.0,4488.0)), (44,(0.0,0.0,4488.0)), (18,(1348501.0,4.06652001E8,4488.0)), (9,(4488.0,4488.0,4488.0)))

我正在尝试实现以下代码,但我的语法中出现了一些问题:

val dataStatsVals = dataStatsRDD.mapValues(x => {
  x._3, x._1, x._1/x._3, math.pow(((x._2/x._3 - x._1/x._3)), 2)
})

我一直在网上搜索试图找到一个好的.mapValues示例,它做了类似的事情,但似乎无法找到它。

编辑: 输入为:求和,平方和和计数

输出为:计数,总和,平均值,方差

2 个答案:

答案 0 :(得分:4)

如果没有样本预期输出,似乎您希望将所有这些放在元组中。如果是这样,你只是错过了外括号:

var notification = new window.Notification("Hello!",
{
    body: "Hello world!",
    data: "https://www.example.com/?id=" + 123
});

notification.onclick = function(e) {
    window.location.href = e.target.data;
}

这会给你一个val dataStatsVals = dataStatsRDD.mapValues(x => { (x._3, x._1, x._1/x._3, math.pow((x._2/x._3 - x._1/x._3), 2)) }) 。结果将是:

Tuple4

答案 1 :(得分:2)

您只需要处理元组的正确部分,这样您就可以使用模式匹配来使其更具可读性:

   val dataStatsVals = dataStatsRDD.mapValues{
      case (d1: Double, d2: Double, d3: Double) => (d3, d1, d1/d3, math.pow(((d2/d3 - d1/d3)), 2))
   }