python - 存储在 bcolz 中时数据大小会爆炸

标签 python blaze bcolz

我有一个包含约 7M 行和 3 列的数据集,其中 2 个数字和 1 个由约 20M 不同字符串 uuid 组成。数据作为 csv 文件需要大约 3G,castra 可以将其存储在大约 2G 中。 我想用这些数据测试 bcolz。

我试过了

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

在耗尽磁盘上的 inode 之前生成了约 70G 的数据 并崩溃。

将此类数据集导入 bcolz 的推荐方法是什么?

最佳答案

来自 Killian Mie 的 bcolz mailing list :

通过 pandas.read_csv() 分块读取 csv,将字符串列从 Python 对象数据类型转换为固定长度的 numpy 数据类型,例如“S20”,然后将其作为 numpy 数组附加到 ctable。

此外,在创建 ctable 时设置 chunklen=1000000 (或类似设置),这将避免在/data 文件夹下创建数百个文件(尽管可能不是最佳压缩方式)

上述 2 个步骤对我来说效果很好(2000 万行,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)

关于python - 存储在 bcolz 中时数据大小会爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35651895/

相关文章:

python - Django SSL Redirect 片段修改,未按预期工作

python - 在同一个 Qwidget 中显示不同的 Paint 类

javascript - 无法加载资源:net::ERR_NAME_NOT_RESOLVED

python - 列之间的相关性 python blaze

python blaze (pandas) 无法 safley 转换 <i8 的用户数据类型

python - pydata 火焰 : does it allow parallel processing or not?

python - zipline 安装错误 : failed building wheel for bcolz

python - 以 bcolz 格式保存 dask 数据帧

python - 我怎样才能填表? ( python , Django )