Я имею дело с проблемой «больших данных» в python, и я действительно борюсь за масштабируемые решения.
Структура данных, которую я сейчас имею, представляет собой огромный словарь списков с миллионами ключей и списками с миллионами элементов. Мне нужно сделать операцию над элементами в списке. Проблема двоякая:
(1) Как выполнить масштабируемые операции над структурой данных такого размера?
(2) Как сделать это с ограничениями памяти?
Для некоторого кода, вот очень простой c пример словаря списков:
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
Проблема в том, что это не может работать для словаря такого размера - я работаю на сервере с более чем 250 ГБ ОЗУ, и он быстро становится слишком большим для памяти. Это также слишком медленно / не масштабируется, так как это одна итерация с одним процессором.
Существуют ли масштабируемые решения этой проблемы?
Может быть, это поможет как-то разбить словарь, сделать вычисления многопроцессорными и агрегировать? Или есть способ сохранить эти данные на диск?
Я в недоумении для идей ...