2016-02-26 4 views
1

У меня есть набор данных с ~ 7M строк и 3 столбца, 2 числовых и 1, состоящий из ~ 20M различных строк uuids. Данные берут вокруг 3G как файл csv, и castra может хранить его примерно в 2G. Я бы хотел проверить bcolz с этими данными.размер данных взрывается при хранении в bcolz

Я попытался

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

который генерируется ~ 70г данных перед изнурительной дескрипторы на диске и грохот.

Каков рекомендуемый способ получения такого набора данных в bcolz?

ответ

1

От Киллиан Миэ на bcolz mailing list:

чтения CSV в кусках через pandas.read_csv(), конвертировать строку столбец из Python объекта DTYPE к длине затруднительного Numpy DTYPE, скажем, «S20», а затем добавить в Numpy массива CTABLE ,

Кроме того, установите chunklen=1000000 (или аналогичный) на CTABLE творения, которое позволит избежать создания сотен файлов в папке/данных (возможно, не является оптимальной для сжатия, хотя)

В 2 шага выше работал хорошо для меня (20000000 строки, 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) 
Смежные вопросы