使用自己的map和reduce函数激发python
我正在尝试使用python spark执行类似mapreduce的操作。这就是我的问题所在使用自己的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
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()