计算标记为该键的集合的每个值的键数
Count the number of keys for each value of a set tagged to that key
我有一对这样的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 总数。所以上面 table 的输出应该是这样的:
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
有办法实现吗?
我建议使用数据框 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)
两种情况的结果是一样的。
yourrdd.toDF().withColumn(“_2”,explode(col(“_2”))).groupBy(“_2”).count.show
我有一对这样的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 总数。所以上面 table 的输出应该是这样的:
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
有办法实现吗?
我建议使用数据框 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)
两种情况的结果是一样的。
yourrdd.toDF().withColumn(“_2”,explode(col(“_2”))).groupBy(“_2”).count.show