Я хотел бы создать dask.Bag
(или dask.Array
) из списка генераторов. Проблема в том, что генераторы (при оценке) слишком велики для памяти.
delayed_array = [delayed(generator) for generator in list_of_generators]
my_bag = db.from_delayed(delayed_array)
NB list_of_generators
именно так - генераторы не израсходованы (пока).
Моя проблема в том, что при создании delayed_array
генераторы расходуются, а оперативная память исчерпывается. Есть ли способ поместить эти длинные списки в Bag
, не потребляя их предварительно или, по крайней мере, не используя их по частям, чтобы использовать ОЗУ на низком уровне?
NNB Я мог записать генераторы на диск, а затем загрузить файлы в Bag
- но я подумал, что смогу использовать dask
, чтобы обойти это?
from_delayed
ожидает, что каждая часть будет достаточно маленькой, чтобы поместиться в памяти, поэтому единственный способ обойти это будет (а) разбить генераторы на части сislice
, чтобы у вас было в 10 раз больше генераторов, 1/10 размера (и затем измените форму, если необходимо, после построения), или (b) оберните каждый генератор во что-то, что создает массив (или что-то еще компактное) итеративно, чтобы вы могли передавать эти массивы в dask вместо генераторов, или (c) вместо этого используйте диск памяти, как вы предложили. Нет ничего тривиального, так что… надеюсь, у кого-то есть лучшее решение. - person abarnert   schedule 14.06.2018BytesIO
, а затем прочитать его. - person abarnert   schedule 14.06.2018