io - 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)
现在我正在寻找最有效的代码来执行以下操作:
- 将此数据以内存映射格式写入磁盘,以便它可用于读取行/列或一些随机访问。
- 最后将另一行附加到此数据集。
- 查询最后 5 行。
- 为给定的一组连续行查询一些随机列。
- 查询非连续的行和列。
如果任务大师在他们允许任何人回答这个问题之前正在寻找我是如何做到的,请回复,我将推出我为完成此任务而编写的所有初步代码。我不在这里这样做,因为它可能会在没有太多信息的情况下弄脏空间。我没有得到 pyarrow 博客上承诺的速度,我确信我做错了,因此请求指导。
解决方案
推荐阅读
- c++ - 在 C++ 中迭代枚举类的常用方法是什么?
- sql - 将 SQL 查询从 with 子句转移到没有 with 子句
- grails - grails如何检查双负零
- node.js - 是否有一个选项可以向我显示特定 npm 包的哪些语义版本将解析为?
- javascript - 为什么我的 React 组件将我的 JSX 渲染为文本而不是 HTML?
- javascript - ++Argument 在调用递归函数时返回的结果与参数 + 1 不同
- python - 数据帧 UDF 以获得更快的性能?
- python - 如何根据序列中的下一个值删除行?(熊猫)
- node.js - ea-nodejs10安装v10.24.1时如何在VPS cPanel WHM上安装node.js v16?
- python - KeyError:尝试按索引访问数据框列的值时,python数据框中的8