如何在Python中使用庞大的列表字典扩展操作?

问题描述 投票:1回答:1

我正在处理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的服务器,并且它很快变得太大而无法存储。它也太慢/不可扩展,因为那是一个处理器的一次迭代。

是否有针对此问题的可扩展解决方案?

也许以某种方式分解字典,进行多处理计算并进行汇总会起作用吗?还是有办法将这些数据保存到磁盘?

我不知所措...

python dictionary memory bigdata dask
1个回答
0
投票

[如果您要做的是对键值对进行令人尴尬的并行操作(如您的示例所示,那么像Dask Bag或PySpark RDD这样的项目可能很合适。

https://docs.dask.org/en/latest/bag.html

© www.soinside.com 2019 - 2024. All rights reserved.