具有元组值的Spark Python中的reduceByKey

时间:2018-06-30 17:44:04

标签: python python-3.x apache-spark pyspark

我的RDD为(key, (val1,val2))。对于此rdd,我想应用reduceByKey函数,我的要求是针对单个键找到最小值val2,并提取结果最小值{的val1 {1}}。 例如:val2 在此,我希望结果集为(1,(a,4)),(2,(b,3)),(1,(c,2)),(2,(d,1))

我在python代码下面有一个主意,但是在这里,我得到的是第一个(1,(c,2)),(2,(d,1)),而不是对应于最小值val1的{​​{1}}。

val1

请帮助我修改代码,以便获得所需的结果。

3 个答案:

答案 0 :(得分:0)

minkey参数一起使用:

from functools import partial
from operator import itemgetter

rdd.reduceByKey(partial(min, key=itemgetter(1)))

答案 1 :(得分:0)

您所需要的只是if else函数中的reduceByKey

rdd3 = rdd2.reduceByKey(lambda x, y: x if(x[1] < y[1]) else y)

应该为您提供所需的输出

#(1, ('c', 2))
#(2, ('d', 1))

我希望答案会有所帮助

答案 2 :(得分:0)

在这里,我将通过使用scala获得所需的结果,因为我现在已经学到了更多scala,所以我现在可以按照以下方式回答自己的问题:

data.frame(v1 = unlist(list1), v2 = rep(seq(length(list1)), lengths(list1)))

#      v1 v2
#1    kip  1
#2 kroket  1
#3     ei  2
#4    koe  3
  

输出:

     

(2,(d,1))

     

(1,(c,2))

我在这里提到了此代码,因为其他人可以参考并发现它很有用。 谢谢...