У меня есть несколько наборов данных, состоящих из 2 столбцов: ID
и ActivityDate
. В наборе данных ID+ActivityDate
является уникальным. Каждый набор данных имеет длину около 35 миллионов записей. Существует более 60 наборов данных.
Мой желаемый результат в основном ID
, FirstActivityDate
и LastActivityDate
. Это, в основном, часть сокращения задания карты / сокращения.
Моя первая попытка была в основном прочитать первый набор данных, установить базовую линию, а затем, когда я читал следующий набор данных, я выполняю foreach, сравнивая и обновляя LastActivityDate
. Хотя используемая память была очень приемлемой (с 2 ГБ, но постоянно ниже 1,25 ГБ), это заняло слишком много времени. Я сделал расчет, результирующий набор должен иметь длину около 1,5 ГБ, поэтому он может управляться с локальной памятью.
for x in files:
parsedData = parseFile(x)
dt = parsedData[0]
cards = parsedData[1]
for card in cards:
#num = int(card[:16])
if card in result:
result[card].lastRecharged = dt
else:
result[card]=CreditCard(dt)
Комментируя эту строку #num = int(card[:16])
, скорость выполнения l oop упала до 30 секунд на файл (оригинал был около 150 секунд), но теперь память вышла из-под контроля. Синтаксический анализ файла - это, в основном, чтение файла, которое занимает менее 1 секунды.
Моя вторая попытка была с использованием pandas, но я не смог объединить наборы данных так, как я хочу. Я должен сказать, что я не опытный в pandas.
Есть ли третий вариант?