【问题标题】:data size blows out when storing in bcolz存储在 bcolz 中时数据大小爆炸
【发布时间】:2016-02-26 12:34:22
【问题描述】:

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

我试过了

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

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

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

【问题讨论】:

    标签: python blaze bcolz


    【解决方案1】:

    来自 Killian Mie,bcolz mailing list

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

    另外,在创建 ctable 时设置 chunklen=1000000(或类似),这将避免在 /data 文件夹下创建数百个文件(虽然可能不是压缩的最佳选择)

    上述两个步骤对我来说效果很好(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)
    

    【讨论】:

      猜你喜欢
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2020-07-24
      相关资源
      最近更新 更多