我有rdd项目,如:
(3922774869,10,1) (3922774869,11,12,2) (3922774869,13,2) (1779744180,1) (1779744180,14,3) (3922774869,15,16,17,4) ...
表示(id,age,count)并且我想将这些行分组以生成一个数据集,其中每一行代表每个id的年龄分布,如下所示((id,age)为uniq):
(1779744180,(10,1),(11,(12,2),(13,2) ...) (3922774869,3),4) ...)
这是(身份证,(年龄,计数),计数)……)
有人能给我一个线索吗?
解决方法
您可以先减少两个字段,然后使用groupBy:
rdd .map { case (id,count) => ((id,age),count) }.reduceByKey(_ + _) .map { case ((id,count) => (id,(age,count)) }.groupByKey()
返回RDD [(Long,Iterable [(Int,Int)])],对于上面的输入,它将包含这两个记录:
(1779744180,CompactBuffer((16,(15,(14,(17,1))) (3922774869,CompactBuffer((11,(16,4),5)))