我正在处理python中的“大数据”问题,我真的在努力寻求可扩展的解决方案。
我当前拥有的数据结构是一个庞大的列表字典,具有数百万个键和具有数百万个项目的列表。我需要对列表中的项目进行操作。问题有两个:
((1)如何对这种大小的数据结构进行可伸缩操作?
((2)如何在内存受限的情况下执行此操作?
对于某些代码,这是列表字典的一个非常基本的示例:
example_dict1 = {'key1':[367, 30, 847, 482, 887, 654, 347, 504, 413, 821],
'key2':[754, 915, 622, 149, 279, 192, 312, 203, 742, 846],
'key3':[586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}
对于元素的简单操作,通常的方法是遍历字典:
new_dictionary = {}
for k, v in example_dict.items():
new_list = []
for i in v: ## iterate through dictionary lists
i = compute_something(i) ## this is just an example, e.g. i**2 or i-13 would also work
new_list.append(i)
# now, create a new dictionary
new_dictionary[k] = new_list
问题是,这对于这样大小的字典不起作用---我正在处理具有超过250GB RAM的服务器,并且它很快变得太大而无法存储。它也太慢/不可扩展,因为那是一个处理器的一次迭代。
是否有针对此问题的可扩展解决方案?
也许以某种方式分解字典,进行多处理计算并进行汇总会起作用吗?还是有办法将这些数据保存到磁盘?
我不知所措...
[如果您要做的是对键值对进行令人尴尬的并行操作(如您的示例所示,那么像Dask Bag或PySpark RDD这样的项目可能很合适。