我正在試驗不同的熊貓友好型存儲方案的刻度數據。到目前爲止,最快(在讀寫方面)一直在使用HDFStore和blosc壓縮以及「固定」格式。如何減少HDFStore的大小開銷?
store = pd.HDFStore(path, complevel=9, complib='blosc')
store.put(symbol, df)
store.close()
我使用股票代碼進行索引,因爲這是我的常見訪問模式。但是,該方案每個符號增加了約1MB的空間。也就是說,如果微型儲存器的數據幀在當天僅包含一千個刻度,則該文件將增加一兆字節。因此,對於大量小型股票來說,.h5
文件很快變得笨拙。
有沒有辦法保持BLOSC /固定格式的性能優勢,但減小尺寸?我試過了「表格」格式,每個符號需要大約285 KB。
store.append(symbol, df, data_columns=True)
但是,這種格式的讀寫速度要慢得多。
萬一有幫助,這是我的數據幀是什麼樣子:
exchtime datetime64[ns]
localtime datetime64[ns]
symbol object
country int64
exch object
currency int64
indicator int64
bid float64
bidsize int64
bidexch object
ask float64
asksize int64
askexch object
的blosc壓縮本身的工作得很好,因爲所得.h5
文件要求每行只有30--35個字節。所以現在我主要關心的是降低HDFStore中每個節點的大小懲罰。
AFAIK它們是PyTables中塊大小的一定最小值;你可以看看「ptrepack」這個文件的各種選項。恕我直言,最低1MB是合理的。你也可以用''Table''格式來寫,而不是設置所有的''data_columns = True'',只要通過''format ='table''';它會編寫表格格式(但除了索引之外,您將無法查詢);但它作爲一個單獨的塊存儲,所以應該幾乎與固定一樣快(但是有更多的空間效率)。 – Jeff
@Jeff任何選項,特別是我應該傳遞給'ptrepack'?如果我不給出任何選項,則生成的文件大小相同。 – chrisaycock
你可以試試''chunkshape'';我不知道這是否會改變大小。 – Jeff