Как вычесть значения из всех ключей в Pair Rdd? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть 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(_+_).

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете попробовать декартово произведение себя rdd и затем groupbyKey.

например,

val rdd=sc.parallelize(1 to 10)
rdd.cartesian(rdd).groupByKey().map(.......subtract here....)
...