У меня большой файл ~ 5 ТБ (> 2000 столбцов и 250 млн строк), и я хочу присоединить его к другому файлу, довольно маленькому ~ 10 ГБ (10 столбцов и 20 млн строк).
Это мой текущий подход в Python:
- Загрузка меньшего файла в память и установка индекса.
- Разделить файл большего размера на 250 частей, каждая из которых помещается в память.
- Загрузить часть k файла большего размера (k = 1, ..., 250) в память, установить индекс и объединить с помощьюменьший файл на основе поля идентификатора (который является индексом).
- Сохранение результатов на диск и загрузка другой части ...
Код:
import pandas as pd
small_file = pd.read_csv('small_file.txt', sep='|', header=None,
usecols=[0,1,2,3,4,5,6,7,8,9], dtype=column_types_small_file)
small_file.set_index(2, inplace=True)
large_file_part_k= pd.read_csv('large_file_part_k.txt', sep='|', header=None)
large_file_part_k.set_index(2, inplace=True)
merged = pd.merge(small_file, large_file_part_k, how="inner", left_index=True, right_index=True)
merged.to_csv('join_results.csv', mode='a', header=False)
Это работает :) Но обработка одной части занимает ~ 550 сек.,Зачем?Загрузка одной части в память занимает ~ 450 сек.:( Я пытался определить типы данных для всех столбцов при загрузке в память, но это усугубило ситуацию, например, в 3-4 раза дольше.
У вас есть другие варианты для этой конкретной ситуации? Машина, которую я используюимеет 120 ГБ памяти и 32 ядра.