我efficient_apriori在 Python 中使用包運行關聯規則。我需要保存結果。我的想法是:
- 將規則轉換為 Pandas df
- 將df保存到hdf5。
問題是我有 40 億條規則。以下代碼崩潰signal 9: SIGKILL:
data = [dict(**rule.__dict__, confidence=rule.confidence, support=rule.support) for rule in rules] # HERE MY CODE CRASHES!!!!!
vystup_df = pd.DataFrame(data)
ROZDELENI = 11
n = math.ceil(len(vystup_df) / ROZDELENI)
for i in range(ROZDELENI):
uloz = vystup_df.loc[i*n : i*n n]
uloz.to_hdf('rules.h5', key='uloz', mode='a')
請問如何改進我的代碼?我需要通過我認為的小部分來保存結果,但我不知道如何。謝謝
uj5u.com熱心網友回復:
您可以將檔案分塊保存,而不是一次全部保存。
假設你可以rules把它當作一個串列來切片,
chunksize = 1000
for start_index in range(0, len(rules), chunksize):
rules_slice = rules[start_index: start_index chunksize]
data = [dict(**rule.__dict__, confidence=rule.confidence, support=rule.support) for rule in rules_slice]
vystup_df = pd.DataFrame(data)
ROZDELENI = 11
n = math.ceil(len(vystup_df) / ROZDELENI)
for i in range(ROZDELENI):
uloz = vystup_df.loc[i*n : i*n n]
uloz.to_hdf('rules.h5', key='uloz', mode='a')
這里的關鍵是您可以將 chunksize 更改為您的機器可以處理的大小,并且您不應該耗盡記憶體。缺點是塊大小越小,花費的時間就越多。
我不是 hdf 的專家,因此可能需要進行一些調整才能將新的 df 附加到現有檔案中(盡管從粗略的搜索來看似乎很簡單)。
另一個解決方案當然是購買更多的記憶體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/383069.html
