我有一些熊貓數據框,我可以使用.to_pickle()
保存到磁盤。這樣的對象是200k-700k。Python Pickle佔用多少內存?
我從memcache.py in the Python-memcache github project看到,它在緩存之前先醃製對象並壓縮它們。
默認情況下,memcached只允許值高達1MB。我發現試圖緩存我的200k數據框可以正常工作,但是60萬個不會在Python memcache級別設置(客戶端甚至不會發出set命令,除非我在memcached上使用-I
,並相應地爲我的Python設置memcache.SERVER_MAX_VALUE_LENGTH
客戶)。
將大約100個這樣的數據幀存儲到memcache中,-I 5m
允許它們全部適合,並且在寫入pickle文件的磁盤上佔用36MB(36212字節)。每memcached的stats
命令,我看到幾乎3倍的字節都被寫入,
STAT bytes_read 89917017
STAT bytes_written 89917211
...
STAT bytes 53022739
它是那麼奇怪的是隻有53MB的存儲,如果89MB寫。
如果我改變我的memcaching代碼,以酸洗DataFrames 第一(即寫入與.to_pickle()
一個臨時文件,讀取臨時文件存儲到內存緩存),我看到每個內存緩存stats
數據大小匹配什麼是磁盤上時,我店相同的文件。
STAT bytes_read 36892901
STAT bytes_written 36893095
...
STAT bytes 36896667
用於存儲酸洗對象的內存與其在磁盤上的大小相比的比例是多少?爲什麼python memcache不能像使用.to_pickle()
一樣將DataFrames轉換爲更小的pickle大小呢?
Pickle可能不是存儲DataFrame的最佳選擇。爲什麼不把它們存儲爲CSV或其他更廣泛使用的格式? – BrenBarn
我花了一些時間探索。我會在下面回答我自己的問題。以CSV格式存儲(奇怪)幾乎與二進制酸洗一樣小。 – hamx0r
您對導出格式有什麼目標/要求?如果你希望它很小,你最好使用像msgpack這樣的格式。根據你的自我回答,目前還不清楚你爲什麼使用泡菜。 – BrenBarn