Консультация № 197868
24.02.2020, 20:00
0.00 руб.
0 2 1
здравствуйте очень прошу подскажите пожалуйста у меня есть вот такой код(он считывает 60 файлов из папки)
import dask.dataframe as dd
dict1 = []
for file in files:
df = dd.read_parquet(filename)
после его выполнения считаные датафрэймы весят 190 гб (49 миллионов строк 57 столбцов) и съедено 75-80 оперативной памяти. а нужно как то все эти 60 файликов объеденить в 1 но это невозможно теми способами которыми я знаю
1 df =pd.concat(dict1) что означает что нужно где то еще столько оперативы и 190 гб вылетает ошибка memoryerror
2 циклом добавлять в датафрэйм по одному файлику из списка а потом удалить этот файл из списка но так же вылазит memoryerror
пытался считать просто всё файлы одной строчкой но что то ничего не выдало (
df = dd.read_parquet(file-*.pyarrow)
подскажите пожалуйста существует ли какое то решение кроме добавления планок оперативы

Обсуждение

давно
Старший Модератор
312929
1973
28.02.2020, 07:33
общий
28.02.2020, 14:21
Адресаты:
Попробуйте через pandas, например, так:
[code lang=python]
import pandas as pd
import os
for file in files:
for df in pd.read_parquet(file, chuncksize=200000):
if not os.path.isfile(filename):
df.to_parquet(filename)
else:
df.to_parquet(filename, mode = 'a', header=False)
[/code]
давно
Старший Модератор
312929
1973
05.03.2020, 18:10
общий
это ответ
Здравствуйте, poloyenchik!

Попробуйте вместо DataFrame использовать Pandas, например, так:
[code lang=python]
import pandas as pd
import os
for file in files:
for df in pd.read_parquet(file, chuncksize=200000):
if not os.path.isfile(filename):
df.to_parquet(filename)
else:
df.to_parquet(filename, mode = 'a', header=False)
[/code]
Форма ответа