python - 在 python 中简单(但大)读/写时间序列数据

标签 python numpy pandas bigdata

关于使用 python 存储简单时间序列数据,我无法解决我的特定问题(可能是因为选项太多!)。

我想要做的就是存储和访问一个非常长的 16 位整数的一维列表。我什至不一定需要存储索引,因为它可以隐式地从样本的顺序中导出。但是我需要一个快速的追加操作。

问题是我希望大约 100GB 的数据需要以 100M 样本/秒的速度即时记录到磁盘(我已经测试过,我的 SSD 设置可以处理 400- 500MB/秒写入),并且只有约 14GB 的 RAM。我最初的想法基本上是将它以 100M 行的 block 的形式写入单个 CSV 文件,但这似乎会浪费大量空间(16 位整数作为字符串最多可以占用 5 个字节,而不是 2 个字节)。其他想法包括对 block 使用 msgpack/npz/raw 二进制文件,虽然我很乐意自己实现它,但我正在尝试找出是否已经存在解决方案。

由于我事先并不知道我需要的确切样本数量,我认为这意味着 numpy 的 memmap 不合适。

后来,我还需要在两个索引之间对数据进行切片处理,而不需要将整个数据集加载到内存中。这不会在录制过程中发生,只会在之后发生。

我认为 pandas HDFStore 是我所追求的,但我不确定一些最佳实践。

具体来说,

  1. 给定一个非常简单的数据格式,大量节点(每个 block 一个节点)与在 pandas 中使用 HDFStore 的单个节点相比有什么影响?如果前者更好,那么好的 block 大小是多少?
  2. HDFStores 是在 pandas 中进行磁盘支持的高性能顺序读写的最佳方式吗?随机访问并不重要。
  3. 我的问题出在 Pandas 领域吗?在这种情况下, Pandas 对我来说似乎有点过分了。

如有任何其他提示或建议,我们将不胜感激。真的,我需要的是 python 中的列表对象,但它也支持快速分块进出磁盘。

最佳答案

我公司的伦敦小组创建了北极。它使用 numpy 字节数组,用 lz4 压缩,并分成 block 发送到 mongodb。在波士顿,我们正在围绕此构建其他功能,但我们发现它效果很好。

它具有出色的性能,可以一次性将所有东​​西都吞掉。

https://github.com/manahl/arctic

看看它是否适合您。

关于python - 在 python 中简单(但大)读/写时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557709/

相关文章:

python - EOFError : ran out of input. 尝试从套接字 pickle.loads 时出现此错误

python - 将 Dataframe 行与 numpy 数组相乘

python - 如何选择数值最大的列名作为新的列元素?

python - 修复错误的 unicode 字符串

python - 计算多个文件中的行数并连同文件名一起输出

每次运行脚本时,Python 头都会打印一次,而不是每次

python - 将复杂的 XML 文件转换为 Pandas dataframe/CSV - Python

python - 如果存在特定值,则从偶数列中删除行

python - 基于另一列的 Pandas 滚动第二个最高值

python - Numpy 类型错误