Spark有自己的map和reduce函数python

时间:2015-08-05 00:43:53

标签: python mapreduce apache-spark

我尝试使用python spark进行mapreduce操作。这就是我所拥有的和我的问题。

object_list = list(objects) #this is precomputed earlier in my script
def my_map(obj):
    return [f(obj)]
def my_reduce(obj_list1, obj_list2):
    return obj_list1 + obj_list2

我想做的事情如下:

myrdd = rdd(object_list) #objects are now spread out
myrdd.map(my_map)
myrdd.reduce(my_reduce)
my_result = myrdd.result()

my_result现在应该只是= [f(obj1), f(obj2), ..., f(objn)]。我想纯粹使用spark作为速度,我的脚本在forloop中这样做时已经花了很长时间。有谁知道如何在火花中做到这一点?

1 个答案:

答案 0 :(得分:2)

通常看起来像这样:

myrdd = sc.parallelize(object_list)
my_result = myrdd.map(f).reduce(lambda a,b:a+b)

RDD有一个sum函数,所以这也可能是:

myrdd = sc.parallelize(object_list)
my_result = myrdd.map(f).sum()

但是,这会给你一个号码。 f(obj1)+f(obj2)+...

如果您想要所有回复[f(obj1),f(obj2), ...]的数组,则不会使用.reduce().sum(),而是使用.collect()

myrdd = sc.parallelize(object_list)
my_result = myrdd.map(f).collect()