1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是一個(gè)“僅”寫(xiě)入 1.5e6 行的簡(jiǎn)單示例。我沒(méi)有做任何事情來(lái)優(yōu)化非常大的文件的性能。您正在創(chuàng)建一個(gè)非常大的文件,但沒(méi)有說(shuō)明有多少行(顯然超過(guò) 10**6)。以下是根據(jù)另一個(gè)線程中的評(píng)論提出的一些建議。
我推薦的區(qū)域(3 個(gè)與 PyTables 代碼相關(guān),2 個(gè)基于外部使用)。
PyTables 代碼建議:
創(chuàng)建文件時(shí)啟用壓縮(
filters=
創(chuàng)建文件時(shí)添加參數(shù))。從 開(kāi)始tb.Filters(complevel=1)
。expectedrows=
在.create_tables()
(根據(jù) PyTables 文檔,“這將優(yōu)化 HDF5 B 樹(shù)和使用的內(nèi)存量”)中定義參數(shù)。默認(rèn)值設(shè)置在tables/parameters.py
(查找 EXPECTED_ROWS_TABLE;在我的安裝中它只有 10000)。如果您要?jiǎng)?chuàng)建 10**6(或更多)行,我建議您將此設(shè)置為更大的值。setting 有一個(gè)附帶的好處
expectedrows=
。如果你沒(méi)有定義 chunkshape,'一個(gè)合理的值是根據(jù) expectedrows 參數(shù)計(jì)算的'。檢查使用的值。這不會(huì)減小創(chuàng)建的文件大小,但會(huì)提高 I/O 性能。
如果您在創(chuàng)建文件時(shí)沒(méi)有使用壓縮,則有 2 種方法可以壓縮現(xiàn)有文件:
外部實(shí)用程序:
PyTables 實(shí)用程序
ptrepack
- 針對(duì) HDF5 文件運(yùn)行以創(chuàng)建新文件(對(duì)于從未壓縮到壓縮,反之亦然)。它隨 PyTables 一起提供,并在命令行上運(yùn)行。HDF5 實(shí)用程序
h5repack
- 與ptrepack
.?它隨 HDF Group 的 HDF5 安裝程序一起提供。
文件壓縮需要權(quán)衡取舍:它減小了文件大小,但增加了訪問(wèn)時(shí)間(降低了 I/O 性能)。我傾向于使用經(jīng)常打開(kāi)的未壓縮文件(以獲得最佳 I/O 性能)。然后完成后,我將其轉(zhuǎn)換為壓縮格式以進(jìn)行長(zhǎng)期存檔。您可以繼續(xù)以壓縮格式使用它們(API 處理干凈)。
添加回答
舉報(bào)