使用自己的map和reduce函数激发python

使用自己的map和reduce函数激发python,python,mapreduce,apache-spark,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(obje

我正在尝试使用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中执行此操作时花费了很长时间。有人知道如何在spark中执行上述操作吗?

通常是这样的:

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()