2016-02-26 46 views
1

我有一個包含〜7M行和3列,2個數字和1〜20M不同字符串uuids的數據集。這些數據以3G作爲csv文件,Castra可以將其存儲在2G左右。 我想用這些數據測試bcolz。當存儲在bcolz中時數據大小被吹掉

我試圖

odo(dask.dataframe.from_castra('data.castra'), 'data.bcolz') 

其中產生的數據的〜70G的磁盤 上排出的inode和崩潰之前。

將這樣的數據集合到bcolz中推薦的方法是什麼?

回答

1

從基利安三重的bcolz mailing list:通過pandas.read_csv()在塊

讀CSV,從Python對象D類的字符串列轉換爲固定長度numpy的D類,比如「S20」,然後追加爲numpy的陣列到ctable 。

此外,設置chunklen=1000000(或類似)在ctable創作這將避免/ data文件夾下創建數百個文件(可能不是最佳的,雖然壓縮)

上述2步的工作很適合我(20元行,40-60列)。

試試這個:

df0 = ddf.from_castra("data.castra") 
df = odo.odo(df0, pd.DataFrame) 
names = df.columns.tolist() 
types = ['float32', 'float32', 'S20'] # adjust 'S20' to your max string length needs 
cols = [bcolz.carray(df[c].values, dtype=dt) for c, dt in zip(names, types)] 

ct = bcolz.zeros(0, dtype=np.dtype(zip(names, types)), 
        mode='w', chunklen=1000000, 
        rootdir="data.bcolz") 
ct.append(cols)