我的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
请帮助我修改代码,以便获得所需的结果。
答案 0 :(得分:0)
将min
与key
参数一起使用:
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))
我在这里提到了此代码,因为其他人可以参考并发现它很有用。 谢谢...