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

布赖恩

我有非唯一键值对,我已经使用创建的map功能从RDD Array[String]

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]的成员

零323

只需直接数对并随后分组(如果需要)即可:

kvPairs.map((_, 1L))
  .reduceByKey(_ + _)
  .map{ case ((k, v), cnt) => (k, (v, cnt)) }
  .groupByKey

如果要gropuByKey在还原之后进行操作,则可能需要使用自定义分区程序,该分区程序仅考虑键的第一个元素。您可以检查RDD拆分并在新的RDD上进行汇总以获取示例实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spark按键排序,然后按分组以获得可迭代的顺序?

Apache Spark按DF分组,将值收集到列表中,然后按列表分组

按值然后按键对字典排序

嵌套字典:按日期分组,然后按枚举值分组并汇总计数

按对象值分组,计数然后按最大对象属性设置组密钥

如何选择多个计数(*)值然后按特定列分组

按值然后按键对字典进行排序

按值然后按键对字典进行排序

按值然后按键对字典进行排序

按值对字典键排序,然后按键排序

按键排序字典,然后按值排序(列表或元组?)

python按值对字典项进行排序,然后按键

按值然后按键对 Map<Int, Int> 进行排序

熊猫分组计数,然后按条件均值

需要帮助进行分组,然后通过Scala在apache spark上的rdd上按值排序

按 Spark 数据帧上的值分组

SQL:查询两个单独的表并返回计数值,然后按两个返回值分组

如何在不对值进行分组的情况下对spark的数据集执行按值计数操作?

熊猫分组并计数,然后按分组大小对整个数据框进行升序排序?

计数不同的ID,然后按不同的ID分组,从而产生不正确的计数

数据框:如何在Scala中分组/计数然后按计数排序

MySQL按列分组,然后按另一列计数

按值长度降序然后按键升序对python dict进行排序

在Python字典中按值排序(降序),然后按键(升序)

首先按键然后按值对搁置文件进行排序。没有导入模块

Spark-如何按键计数记录数

SQL查询计数出现的次数,然后按天分组,但也填写缺少的日子

按唯一值过滤,然后按其他条件计数

Apache Spark Scala:如何在按键分组rdd时保持值的顺序