相关疑难解决方法(0)

Spark - 按键分组,然后按值计数

我有一些非唯一的键值对,我使用的map函数创建了RDD Array[String]

val kvPairs = myRdd.map(line => (line(0), line(1)))
Run Code Online (Sandbox Code Playgroud)

这会生成以下格式的数据:

1, A
1, A
1, B
2, C
Run Code Online (Sandbox Code Playgroud)

我想按照它们的值对所有键进行分组,并提供这些值的计数,如下所示:

1, {(A, 2), (B, 1)}
2, {(C, 1)}
Run Code Online (Sandbox Code Playgroud)

我尝试了很多不同的尝试,但我能得到的最接近的是这样的:

kvPairs.sortByKey().countByValue()
Run Code Online (Sandbox Code Playgroud)

这给了

1, (A, 2)
1, (B, 1)
2, (C, 1)
Run Code Online (Sandbox Code Playgroud)

也,

kvPairs.groupByKey().sortByKey()
Run Code Online (Sandbox Code Playgroud)

提供价值,但它仍然不是那里:

1, {(A, A, B)}
2, {(C)}
Run Code Online (Sandbox Code Playgroud)

我尝试将两者结合在一起:

kvPairs.countByValue().groupByKey().sortByKey()
Run Code Online (Sandbox Code Playgroud)

但这会返回错误

错误:value groupByKey不是scala.collection.Map的成员[(String,String),Long]

scala mapreduce key-value apache-spark rdd

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

apache-spark ×1

key-value ×1

mapreduce ×1

rdd ×1

scala ×1