1

所以我得到了我想放入 bcolz 的这个大刻度数据文件(一天 60GB 未压缩)。我计划逐块读取这个文件并将它们附加到 bcolz 中。

据我所知, bcolz 只支持追加列而不是行。但是,我会说,刻度数据在行方面比在列方面更重要。例如:

0  ACTX.IV         0  13.6316 2016-09-26 03:45:00.846     ARCA        66   
1  ACWF.IV         0  23.9702 2016-09-26 03:45:00.846     ARCA        66   
2  ACWV.IV         0  76.4004 2016-09-26 03:45:00.846     ARCA        66   
3  ALTY.IV         0  15.5851 2016-09-26 03:45:00.846     ARCA        66   
4  AMLP.IV         0  12.5845 2016-09-26 03:45:00.846     ARCA        66   
  1. 有人对如何做到这一点有任何建议吗?
  2. 在使用 bcolz 时,我应该选择的压缩级别有什么建议吗?我更关心以后的查询速度而不是大小。(我在问这个,因为如下图所示,似乎一级压缩的 bcolz ctable 实际上比未压缩的 ctable 具有更好的查询速度。所以我的猜测是查询速度不是具有压缩级别的单调函数)。参考: http: //nbviewer.jupyter.org/github/Blosc/movielens-bench/blob/master/querying-ep14.ipynb

提前致谢! bcolz 的查询速度

4

1 回答 1

0
  1. 您可以执行以下操作:

    import blaze as bz
    ds = bz.data('my_file.csv')
    for chunk in bz.odo(ds, bz.chunks(pd.DataFrame), chunksize=1000000):
        bcolz.ctable.fromdataframe(chunk, rootdir=dir_path_for_chunk,
                                   mode='w', 
                                   cparams=your_compression_params)
    

    而不是使用 bcolz.walk 迭代块。

  2. 在大多数情况下,默认值(blosc 级别 5)是合适的。如果你想要每一点性能,你必须从大小约为 1-2 GB 的真实数据创建示例文件,并使用不同的压缩参数测试性能。
于 2017-02-09T15:59:50.813 回答