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

问题描述 投票:1回答:2

我有一对像这样的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)

现在,我想获得集合中包含的每个值的总计数。所以上表的输出应该是这样的:

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

有没有办法实现这个目标?

scala apache-spark bigdata rdd data-cleaning
2个回答
0
投票
yourrdd.toDF().withColumn(“_2”,explode(col(“_2”))).groupBy(“_2”).count.show

2
投票

我建议使用dataframe 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)

结果在两种情况下都是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.