sql >> Database >  >> NoSQL >> MongoDB

Verminder het gebruikte geheugen bij het laden van het dataframe van enorme panda's van MongoDB

Wat zich in een CSV bevindt en wat zich in een dataframe bevindt, zijn twee heel verschillende dingen. Bijvoorbeeld 9.9 en 9.99999999999999 in een CSV dezelfde hoeveelheid ruimte innemen in een dataframe.

Dat gezegd hebbende, nemen gegevens in een dataframe veel minder ruimte in beslag dan gegevens in een lijst. Het maken van een lijst is duur in het geheugen; en toevoegen aan een dataframe vereist dat panda's een nieuw (groter) dataframe maken, alles kopiëren en vervolgens het originele dataframe achterlaten om te worden weggegooid.

U zou het waarschijnlijk veel beter doen als u een dataframe van 60000 rijen vooraf had toegewezen (of hoeveel rijen u in totaal ook heeft); bijv.:

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

en vervolgens voor elke rij gegevens voor die rij ingevoegd, zonder te vertrouwen op dataset lijst:

data.values[count,:] = rowdata_at_count

Dit is niet type-veilig, maar het is vrij snel (omdat er geen toewijzingen plaatsvinden), dus zorg ervoor dat rowdata_at_count is een lijst waarvan de elementen overeenkomen met kolomtypes.

BEWERKEN

Ja, het toevoegen van 100 regels is, geloof ik, net als 100 concats van één regel (omdat elke append de tabel opnieuw moet toewijzen en kopiëren, net als concat). Vooraf toewijzen vermijdt zowel toevoegen als samenvoegen:de tabelgrootte verandert niet, er hoeft niet opnieuw te worden toegewezen en gekopieerd.



  1. PHP mongodb-stuurprogramma verbinding controleren

  2. Hoe meteor.com-apps externe mongo db te laten gebruiken

  3. MongoDB - bestandsgrootte is enorm en groeit

  4. Is er een manier om te voorkomen dat MongoDB meervoudsvormen toevoegt aan collectienamen?