У меня есть Pair Rdd[(Int, Array[Double])]
, и я хочу, чтобы каждый ключ вычитал все другие массивы из своих собственных.
Например, если мой rdd
равен:
[(1, Array_1[Double])]
[(2, Array_2[Double])]
[(3, Array_3[Double])]
Iхочу:
[(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(_+_).