Присоединяйся к двум огромным файлам без порций с пандами - PullRequest
1 голос
/ 11 июня 2019

У меня есть File1 с "id, name" и File2 с "id, address". Я не могу загрузить первый файл (менее 2 ГБ): он вылетает после 76 тыс. Строк (с конкатом чанка) и только 2 столбцов ... Я не могу также прочитать read_csv для второго файла, потому что он вылетает из ядра после загрузки некоторых строк.

Мне нужно объединить File1 и File2 с "id", но если я не могу поместить файлы в переменную dataframe, я не знаю, как это сделать ...

Файл размером всего 5 ГБ с 30M строками, но после нескольких секунд загрузки происходит сбой ядра.

Как присоединить файл без фрейма, пожалуйста?

Я пробовал с броском, но он падает.

chunks = []
cols = [...]
for chunk in pd.read_csv("file2.csv", chunksize=500000, sep=',', error_bad_lines=False, low_memory=False, usecols=cols):
    chunks.append(chunk)
df = pd.concat(chunks, axis=0)
print(f.shape)

Мне нужен файл данных для загрузки, чтобы присоединиться к ним или присоединиться к файлу без загрузки, если это возможно

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Вы читаете порцию df2 за порцией, но так как вы добавляете все порции, ваш результирующий порции имеет тот же размер, что и ваш файл2.

Что вы можете сделать, если вы в состоянии полностью загрузить свой df1, так это присоединиться к вашему чану df2 по чанку следующим образом:

for chunk in pd.read_csv("file2.csv", chunksize=500000, sep=',', error_bad_lines=False, low_memory=False, usecols=cols):
    df1.merge(chunk, on =['id'], how='left')
0 голосов
/ 11 июня 2019

Подобные куски определенно все равно приведут к краху вашего ядра, поскольку вы все еще пытаетесь поместить все в память.Вы должны сделать что-то со своими кусками, чтобы уменьшить их размер.

Например, вы можете прочитать оба файла в чанках, соединить каждый чанк, вывести совпадения в другой файл и сохранить несопоставленные идентификаторы в памяти.Это может все еще привести к поломке вашего ядра, если вам не повезет.Это зависит от того, каковы ваши ограничения производительности и что вам нужно делать с вашими данными впоследствии.

...