【发布时间】:2016-03-03 04:35:25
【问题描述】:
我有使用RDD Array[String] 中的map 函数创建的非唯一键值对
val kvPairs = myRdd.map(line => (line(0), line(1)))
这会产生以下格式的数据:
1, A
1, A
1, B
2, C
我想按它们的值对所有键进行分组,并提供这些值的计数,如下所示:
1, {(A, 2), (B, 1)}
2, {(C, 1)}
我尝试了许多不同的尝试,但我能得到的最接近的是这样的:
kvPairs.sortByKey().countByValue()
这给了
1, (A, 2)
1, (B, 1)
2, (C, 1)
还有,
kvPairs.groupByKey().sortByKey()
提供价值,但还不够:
1, {(A, A, B)}
2, {(C)}
我尝试将两者结合在一起:
kvPairs.countByValue().groupByKey().sortByKey()
但这会返回错误
错误:值 groupByKey 不是 scala.collection.Map[(String, String),Long] 的成员
【问题讨论】:
-
countByValue() 返回一个映射,groupByKey 是 RDD 上的一个方法 - 你不能在它上面使用它。
标签: scala apache-spark mapreduce rdd key-value