MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Kurangi memori yang digunakan untuk memuat kerangka data panda besar dari MongoDB

Apa yang ada di CSV dan apa yang ada di dataframe adalah dua hal yang sangat berbeda. Misalnya, 9.9 dan 9.99999999999999 dalam CSV akan mengambil jumlah ruang yang sama dalam kerangka data.

Yang mengatakan, data dalam kerangka data membutuhkan lebih sedikit ruang daripada data dalam daftar. Membuat daftar itu mahal dalam memori; dan menambahkan ke kerangka data mengharuskan panda untuk membuat kerangka data baru (lebih besar), menyalin semuanya, lalu membiarkan kerangka data asli menjadi sampah.

Anda mungkin akan melakukan jauh lebih baik jika Anda melakukan pra-alokasi kerangka data 60000 baris (atau berapa pun jumlah baris yang Anda miliki secara total); misalnya:

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

dan kemudian untuk setiap baris disisipkan data untuk baris tersebut, tanpa bergantung pada dataset daftar:

data.values[count,:] = rowdata_at_count

Ini tidak aman untuk tipe, tetapi cukup cepat (karena tidak ada alokasi yang terjadi), jadi pastikan rowdata_at_count adalah daftar yang elemennya sesuai dengan tipe kolom.

EDIT

Ya, menambahkan 100 baris, saya percaya, seperti 100 concat dari satu baris (karena setiap append harus mengalokasikan ulang dan menyalin tabel, sama seperti concat). Prealokasi menghindari penambahan dan penggabungan:ukuran tabel tidak berubah, tidak ada realokasi dan penyalinan yang perlu dilakukan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cara menghitung hitungan dan hitungan unik pada dua bidang dalam fungsi pengurangan mongo

  2. apa batchSize default di pymongo?

  3. kueri agregasi mongo dengan driver mgo

  4. MongoDB - Memfilter konten dari Array internal di hasilset

  5. $cond operator kode java