首页 > 解决方案 > pyarrow 追加和读取时间序列数据的行/列

问题描述

我正在寻找使用 pyarrow 对行和列进行内存映射读取,用于具有多列的时间序列数据。我并不真正关心以较慢的速度写入历史数据。我的主要目标是最快的读取速度(对于单行、单列、多行列),然后是最快的追加速度(定期追加行)。这是生成我要测试的数据的代码。这是一个多索引数据框,其列作为字段(open、high、low ...),索引是一个两级多索引,其中 datetime 和符号作为两个级别。也欢迎对此特定架构发表评论。

import time
import psutil, os

KB = 1<<10
MB = 1024 * KB
GB = 1024 * MB

idx = pd.date_range('20150101', '20210613', freq='T')
df = {}
for j in range(10):
    df[j] = pd.DataFrame(np.random.randn(len(idx), 6), index=idx, columns=[i for i in 'ohlcvi'])
df = pd.concat(df, axis=1)
df = df.stack(level=0)
df.index.names=['datetime', 'sym']
df.columns.name = 'field'
print(df.memory_usage().sum()/GB)

现在我正在寻找最有效的代码来执行以下操作:

  1. 将此数据以内存映射格式写入磁盘,以便它可用于读取行/列或一些随机访问。
  2. 最后将另一行附加到此数据集。
  3. 查询最后 5 行。
  4. 为给定的一组连续行查询一些随机列。
  5. 查询非连续的行和列。

如果任务大师在他们允许任何人回答这个问题之前正在寻找我是如何做到的,请回复,我将推出我为完成此任务而编写的所有初步代码。我不在这里这样做,因为它可能会在没有太多信息的情况下弄脏空间。我没有得到 pyarrow 博客上承诺的速度,我确信我做错了,因此请求指导。

标签: iotime-seriesparquetpyarrow

解决方案


推荐阅读