Мне нужно извлечь 230000 документов из базы данных Монго, расположенной в другой стране, и загрузить их в DataFrame.
cursor = mydb.mycollection.find(filter, {"projection 1": 1, "projection 2": 1, "projection 3": 1, ... , "projection 18": 1}, batch_size=25000)
находит данные мгновенно, но их передача на фрейм данных с помощью df = DataFrame(list(cursor))
занимает 24 секунды, что слишком долго.
Я пытался превратить итератор в несколько небольших фреймов данных и объединить их, но результат тот же (24 секунды):
def iterator2dataframes(iterator, chunk_size: int):
"""Turn an iterator into multiple small pandas.DataFrame
This is a balance between memory and efficiency"""
records = []
frames = []
for i, record in enumerate(iterator):
records.append(record)
if i % chunk_size == chunk_size - 1:
frames.append(pd.DataFrame(records))
records = []
if records:
frames.append(pd.DataFrame(records))
return pd.concat(frames)
df = iterator2dataframes(cursor, 25000)
Как я могу ускорить это? Тем более, что в какой-то момент мне придется загружать DataFrame, используя 30-40 миллионов документов Mongo, в кратчайшие сроки.
Есть ли способ использовать массовый дамп для фрейма данных?