如何从 Pair Rdd 中的所有键中减去值?
How to substract values from all keys in Pair Rdd?
我有一个 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(_+_).
可以试试自己rdd的cartesian产品,然后groupbyKey。
例如
val rdd=sc.parallelize(1 to 10)
rdd.cartesian(rdd).groupByKey().map(.......subtract here....)
我有一个 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(_+_).
可以试试自己rdd的cartesian产品,然后groupbyKey。
例如
val rdd=sc.parallelize(1 to 10)
rdd.cartesian(rdd).groupByKey().map(.......subtract here....)