我有一对RDD,像这样:
id value
id1 set(1232, 3,1,93,35)
id2 set(321,42,5,13)
id3 set(1233,3,5)
id4 set(1232, 56,3,35,5)
现在,我想获取集合中每个值的ID总数。因此,上表的输出应如下所示:
set value count
1232 2
1 1
93 1
35 2
3 3
5 3
321 1
42 1
13 1
1233 1
56 1
有没有办法做到这一点?
答案 0 :(得分:2)
我建议使用dataframe API,因为它更容易理解。使用此API,可以使用explode
和groupBy
如下解决问题:
df.withColumn("value", explode($"value"))
.groupBy("value")
.count()
使用RDD代替,一种可能的解决方案是使用flatMap
和aggregateByKey
:
rdd.flatMap(x => x._2.map(s => (s, x._1)))
.aggregateByKey(0)((n, str) => n + 1, (p1, p2) => p1 + p2)
两种情况下的结果都是相同的。
答案 1 :(得分:0)
yourrdd.toDF().withColumn(“_2”,explode(col(“_2”))).groupBy(“_2”).count.show