MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Намалете използваната памет за зареждане на рамка с данни на огромни панди от MongoDB

Това, което е в CSV и това, което е в рамка с данни, са две много различни неща. Например 9.9 и 9.99999999999999 в CSV ще заема същото количество място в рамка с данни.

Въпреки това данните в рамка с данни заемат много по-малко място от данните в списък. Конструирането на списък е скъпо в паметта; и добавянето към рамка от данни изисква pandas да направи нова (по-голяма) рамка от данни, да копира всичко, след което да остави оригиналната рамка от данни за събиране на отпадъци.

Вероятно ще се справите много по-добре, ако предварително разпределите рамка от данни от 60 000 реда (или колкото редове имате общо); напр.:

data = pd.DataFrame(np.empty((60000,), dtype=[
    ('x', np.uint8),
    ('y', np.float64)
]))

и след това за всеки ред вмъкнати данни за този ред, без да се разчита на dataset списък:

data.values[count,:] = rowdata_at_count

Това не е безопасно за тип, но е доста бързо (тъй като не се извършват разпределения), така че се уверете, че rowdata_at_count е списък, чиито елементи съответстват на типове колони.

РЕДАКТИРАНЕ

Да, добавянето на 100 реда е, според мен, като 100 concats на един ред (тъй като всяко добавяне трябва да преразпредели и копира таблицата, точно като concat). Предварителното разпределяне избягва както добавянето, така и прехвърлянето:размерът на таблицата не се променя, не е необходимо преразпределяне и копиране.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да рестартирате съществуващ MongoDB Docker контейнер с нови флагове към демон

  2. Spring Data-MongoDb Опции за метод на агрегиране

  3. Как изпълнявате find(id:{$in:[list]}) с помощта на vertx-mongo клиент

  4. Отпечатване на изхода на заявката на Mongo във файл, докато сте в mongo shell

  5. secureIndex в mongodb