Удаление дубликатов строк сразу в файлах через pandas

Есть множество больших файлов (от 1гб и больше) в папке с множеством колонок, нужно сделать так, чтобы во всех файлах не было дублей строк (дубли 100% удаляются путем df=df.drop_duplicates()). Проблема в том, что объединить все файлы в один ДФ, удалить дубли, а потом опять разбить их на части я не могу, т.к. суммарно файлов где то на 65-70гб, соответственно, команда вида:

df = (pd
    .concat(map(lambda file: pd.read_csv(file, sep=',', error_bad_lines=False, low_memory=False), file_in_folder)) \
    .drop_duplicates()
    .reset_index()
 )

df = df.drop('index', 1)

кладет на лопатки анаконду и падает ядро. Из идей, которые пришли в голову, это брать каждый файл и каждый файл сравнивать с соседнем файлом удаляя дубликаты в первом. Но тут, по факту, будет процесс чтения каждого файла и сравнение с каждым, что опять приведет к падению ядра. Есть ли какие-либо еще идеи? На выходе, мне нужно множество (сколько их будет - без разницы) мелких файлов, между которыми точно нет дублей строк, чтобы потом, эти файлы засунуть в др. скрипт для дальнейшей обработки. Как вариант, можно попробовать локально поднять БД (например SQLite3) и засунуть в нее все файлы, а потом удалить дубли в ней и сохранить все обратно в файлы. Но пока не рассматриваю эту идею, т.к. все файлы имеют одинаковую структуру и содержат около 200 колонок и вложенные в ячейки словари.


Ответы (1 шт):

Автор решения: MaxU

Воспользуйтесь Dask - он умеет работать с данными, объем которых значительно превышает объем свободной памяти.

PS правда работать это будет в несколько раз медленнее по сравнению с Pandas.

Также можно построить Apache Spark кластер - он позволяет "разделенно" и параллельно обрабатывать табличные данные на многих узлах кластера.

→ Ссылка