【发布时间】:2018-09-19 22:40:56
【问题描述】:
我有一个Pair Rdd[(Int, Array[Double])],我希望每个键都从它自己的数组中减去所有其他数组。
例如,如果我的rdd 是:
[(1, Array_1[Double])]
[(2, Array_2[Double])]
[(3, Array_3[Double])]
我想要:
[(1, Sum( Array_1[Double] - Array_i[Double] ))], where i=2,3
[(2, Sum( Array_2[Double] - Array_i[Double] ))], where i=1,3
[(3, Sum( Array_3[Double] - Array_i[Double] ))], where i=1,2
我考虑过将rdd 转换为Rdd[(Int, (Array, List(Array)))],但我不知道是否有比这更简单的方法。
有什么解决办法吗?
答案是:
val S = rdd.cartesian(rdd).filter{ case(a, b) => a._1!=b._1}
.map(x => (x._1._1, (x._1._2-x._2._2)))
.reduceByKey(_+_).
【问题讨论】:
标签: scala apache-spark rdd key-value