我必须从另一个国家的mongo数据库中提取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)
如何加快速度?尤其是因为有一次我必须在尽可能短的时间内使用30-40百万个Mongo文档加载DataFrame。
是否有使用批量转储到数据帧的方法?