用来自PyMongo光标/迭代器的数据加载Pandas DataFrame太慢

时间:2019-01-24 12:56:48

标签: python mongodb pandas dataframe pymongo

我必须从另一个国家的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。

是否有使用批量转储到数据帧的方法?

0 个答案:

没有答案