我尝试使用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中这样做时已经花了很长时间。有谁知道如何在火花中做到这一点?
答案 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()