我有一个关键日期和价值的rdd。就像是:
2017-07-03 00:00:00 (u'LANXESS', 17119)
2017-07-03 00:00:00 (u'SCHALTBAU', 225)
2018-05-08 00:00:00 (u'LINDE', 8105)
2018-05-08 00:00:00 (u'HSBC', 16084)
我想使用rdd.reduceByKey,我想选择“somenumber”的最大值。
所以对于样本输入我期望看到:
2017-07-03 00:00:00 (u'LANXESS', 17119)
2018-05-08 00:00:00 (u'HSBC', 16084)
这实际上是日期是我的关键,并且值已被过滤。
我想做的事情如下:
test4 = test3.reduceByKey(lambda a,b: math.max(a_2))
但我认为是错的。
我怎么能这样做?
谢谢
您可以使用key参数使用python builtin max函数。 Max函数按键函数比较项(在您的情况下为lambda x:x [1]或itemgetter(1))。
rdd = sc.parallelize([
('2017-07-03 00:00:00', (u'LANXESS', 17119)),
('2017-07-03 00:00:00', (u'SCHALTBAU', 225)),
('2018-05-08 00:00:00', (u'LINDE', 8105)),
('2018-05-08 00:00:00', (u'HSBC', 16084)),
]).reduceByKey(lambda x,y: max((x, y), key=lambda x: x[1]))
rdd.collect()
或者以更多功能的方式
from operator import itemgetter
from functools import partial
reduce_func = partial(max, key=itemgetter(1))
rdd = sc.parallelize([
('2017-07-03 00:00:00', (u'LANXESS', 17119)),
('2017-07-03 00:00:00', (u'SCHALTBAU', 225)),
('2018-05-08 00:00:00', (u'LINDE', 8105)),
('2018-05-08 00:00:00', (u'HSBC', 16084)),
]).reduceByKey(reduce_func)
rdd.collect()
结果:
[('2018-05-08 00:00:00', ('HSBC', 16084)),
('2017-07-03 00:00:00', ('LANXESS', 17119))]