Spark(pyspark)如何仅在3元素元组的2个元素上reduceByKey

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark(pyspark)如何仅在3元素元组的2个元素上reduceByKey相关的知识,希望对你有一定的参考价值。

我有这样的地图结果

[('成功','',1),('成功','',1),('错误','something_random',1),('错误','something_random',1),('错误','something_random',1)]

是否有一种减少按键的方式最终:

[('成功',2),('错误',3)]

然后以某种方式在文件上打印所有错误?

答案

以下是获得所需结果的两个选项:

1)将3元素元组转换为2元素元组然后使用reduceByKey

rdd.map(lambda x: (x[0], x[2])).reduceByKey(lambda x, y: x + y).collect()
# [('success', 2), ('error', 3)]

2)groupBy元组的第一个元素,然后使用mapValues总结每个组的值(第三个元素):

rdd.groupBy(lambda x: x[0]).mapValues(lambda g: sum(x for _,_,x in g)).collect()
# [('success', 2), ('error', 3)]

以上是关于Spark(pyspark)如何仅在3元素元组的2个元素上reduceByKey的主要内容,如果未能解决你的问题,请参考以下文章

PySpark UDF 返回可变大小的元组

Spark YARN 集群仍未得到充分利用

Spark将包含元组的列添加到数据帧

Python基础(3) - 去掉列表或元组中的重复元素

No4.元组的魔法

如何提取每个子列表中每个元组的第一个元素?