Python 从PyMongo游标/迭代器加载数据帧的速度太慢
我必须从另一个国家的mongo数据库中提取230000个文档,并将它们加载到数据帧中Python 从PyMongo游标/迭代器加载数据帧的速度太慢,python,mongodb,pandas,dataframe,pymongo,Python,Mongodb,Pandas,Dataframe,Pymongo,我必须从另一个国家的mongo数据库中提取230000个文档,并将它们加载到数据帧中 cursor=mydb.mycollection.find(过滤器,{“投影1”:1,“投影2”:1,“投影3”:1,…,“投影18”:1},批大小=25000)立即查找数据,但使用df=dataframe(列表(光标))将数据传输到数据帧需要24秒,这太长了 我尝试将迭代器转换为多个小数据帧并将它们连接起来,但结果是相同的(24秒): 我怎样才能加快速度?特别是在某一点上,我必须在尽可能短的时间内使用3000
cursor=mydb.mycollection.find(过滤器,{“投影1”:1,“投影2”:1,“投影3”:1,…,“投影18”:1},批大小=25000)
立即查找数据,但使用df=dataframe(列表(光标))
将数据传输到数据帧需要24秒,这太长了
我尝试将迭代器转换为多个小数据帧并将它们连接起来,但结果是相同的(24秒):
我怎样才能加快速度?特别是在某一点上,我必须在尽可能短的时间内使用3000-4000万个Mongo文档加载数据帧
有没有一种方法可以使用数据帧的大容量转储
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)