【问题标题】:Writing larger than memory data into bcolz将大于内存的数据写入 bcolz
【发布时间】:2016-12-05 06:28:17
【问题描述】:

所以我得到了我想放入 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

提前致谢!

【问题讨论】:

    标签: python bcolz


    【解决方案1】:
    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 的真实数据创建示例文件,并使用不同的压缩参数测试性能。

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多