我有对象来处理的数组:Objects
,我有一个函数,它接受在字典中,和一个对象,并返回相同的字典,改性:如何在spark中并行处理返回字典?
new_dict = modify_object_dict(object_dict, object)
modify_object_dict
执行以下操作:
增加了一个密钥给字典这是处理
对象的名称的DIC内创建一个字典作为一个值给键(辞典),其中添加了元素并从中删除了元素。
例如,该对象可能是一个文件:
object_dict['file_name']=sub_dictionary
,子字典可能包含sub_dictionary['file_attribute']=attribute
。
modify_object_dict
填充这些子字典,如上所示,其结果是保持子字典一个字典。
请注意,子词典不会相互影响。即一个对象的字典不与另一个对象的字典交互。
我想用火花并行这些对象的处理:
object_dict = {} # dictionary is initially empty
RDD = (sc.parallelize(Objects)
.map(lambda object: modify_object_dict(object_dict, object))
这是正确的方式做到这一点?如果不是,每次调用映射函数时,返回被修改的字典的正确方法是什么?
不幸的是,你不能修改的任务内的操作上的驱动程序存在的变量遗嘱执行人。 'modify_object_dict()'做了什么?也许,你可以在任务中应用你的处理,然后利用'collectAsMap()'? –