python中的ReduceByKey

时间:2016-02-25 18:51:22

标签: python pyspark

Python中的函数是否与Spark(PySpark)中的reduceByKey完全相同:

a.reduceByKey(lambda a,b:a+b)

例如:

a = [(1, ['a']),
     (1, ['b']),   
     (2, ['c']),   
     (2, ['d']),   
     (3, ['e'])]

b = [(1,['a','b']),
     (2,['c','d']),
     (3,['e']),

2 个答案:

答案 0 :(得分:0)

我不知道。但是你自己写一个很容易。

from collections import OrderedDict

def reduce_by_key(ls):
    d = OrderedDict()
    for key, sublist in ls:
        d.setdefault(key, []).extend(sublist)
    return list(d.items())

如果不需要保留订单,则可以使用常规dict

答案 1 :(得分:0)

没有。可能最接近的是toolz.itertoolz.reduceby,尽管它具有不同的语义(以流式方式应用,因此它不假设相关性或可交换性)。它还减少了完整的对象并返回字典:

list(reduceby(first, lambda x, y: (first(x), second(x) + second(y)), a).values())
## [(1, ['a', 'b']), (2, ['c', 'd']), (3, ['e'])]