计算标记为该键的集合的每个值的键数

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,使用explodegroupBy可以解决问题,如下:

df.withColumn("value", explode($"value"))
  .groupBy("value")
  .count()

改用 RDD,一种可能的解决方案是使用 flatMapaggregateByKey:

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