我有这个RDD(id,(a,b,c)),其中c是一个可以为不同的id重复的字符串。也可以重复id。 现在,我需要按id聚合,聚合将是" 总和(a)中, 总和(b)中 数不同(c)。
我正在考虑使用reduceByKey,我知道如何使用sum部分,但不知道如何处理计数不同
理想情况下,我想的是:
RDD.reduceByKey((x,y)=> (x._1 + y._1, x._2 + y._2, countDistinct(x._3, y._3)))
有什么想法吗?非常感谢!
*更新(1)* 我现在能做的最好的事情是:
RDD.reduceByKey((x,y)=> (x._1 + y._1, x._2 + y._2, (x._3 + "," + y._3))).map(row => row._1, row._2._1, row._2._2, row._2._3.split(",").distinct.length
答案 0 :(得分:0)
我现在能想到的最好的就是使用一套中间套装,然后检查它的尺寸。我想如果有办法在一种方法中做到这一点
RDD.aggregateByKey((0,0,Set[Int]()))(
(x,y) => (x._1 + y._1, x._2 + y._2, x._3 + y._3),
(x,y) => (x._1 + y._1, x._2 + y._2, x._3 ++ y._3)
).mapValues(x => (x._1, x._2, x._3.size))