Я успешно выполнил ваш код, используя следующий метод с объемом памяти, ограниченным 32 ГБ.
Я избавился от аргумента BLOCKSIZE
и использовал repartition
вместо этого на df1 и df2.
df1 = df1.repartition(npartitions=50)
df2 = df2.repartition(npartitions=1)
Обратите внимание, что размер df2 действительно меньше по сравнению с df1 ( 2,5 МБ против 23,75 МБ ), поэтому я сохранил только один раздел для df2 и Разрежьте df1 на 50 разделов.
И это должно заставить код работать на вас. Для меня используемая память осталась ниже 12 ГБ.
Чтобы проверить, я вычислил длину результата:
len(df) # 3001995
Следуя вышесказанному, создаем файл паркета с 50 разделами. Вы можете снова использовать repartition
, чтобы получить нужный размер раздела.
NB:
Добавление этого должно ускорить ваш код:
from dask.distributed import Client
client = Client()
В моем случае мне пришлось использовать аргумент Client(processes=False)
из-за моей рабочей среды.