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

Joh*_*y19 0 tuples mapreduce apache-spark pyspark

我有这样的地图结果

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

是否有一种方法可以通过键减少最终结果:

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

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

Psi*_*dom 5

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

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

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

2)groupBy元组的第一个元素,然后使用mapValues以下内容对每个组的值(第三个元素)求和:

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